スレッドプロセスでSTDIOを/ dev / nullに転送する方法は?

スレッドプロセスでSTDIOを/ dev / nullに転送する方法は?

走ろうとしています。プラリウムワインと一緒に遊ぶところで、奇妙な問題が発生しました。一般的なデスクトップエントリで実行しようとすると、次のJavaScriptエラーが発生します。

エラー0

端末で実行すると、これは発生しません。 / dev / nullのパイプを使用しても、初めてログインした後にターミナルでPlarium Playを最初に実行せずにデスクトップエントリでPlarium Playを実行しようとすると、2つのJavaScriptエラーが発生します。

エラー1 エラー2

どちらの場合も、取り除いた後は水ぶきが永遠に止まります。

最初のコマンドラインでPlarium Playを起動し、その後の実行に変更されたデスクトップエントリ(/ dev / nullのstdioパイプを使用)を使用している場合、これは発生しません。ターミナルで起動されたプログラムは、Ctrl + Cを押すかターミナルを閉じても実行され続け、後でパイプされたデスクトップエントリを使用して実行することは初期ターミナル実行よりも速いため、バックグラウンドプロセスを開始すると仮定します。また、注目すべき点は、上記の起動エラーが発生した後にログアウトせずにPlarium Playを起動しようとすると、Plarium Playインスタンスが実行中であると見なされ、すぐに終了することです。

端末でサービスを開始しても、少なくともどこかに通常のstdioをパイプするように変更しないと、デスクトップアイテムからPlarium Playを起動できません。変更されていないデスクトップエントリを使用しようとすると、上記のようなJavaScriptエラーが発生します。

エラー3

ターミナルでこれを行うか、出力をパイプする限り、ログアウトせずに最後のエラー以降にPlarium Playを再起動できることに注意してください。

私の結論は、JavaScriptとElectronの制限のために(両方についてほとんど知らない)、バックグラウンドサービスの既存のインスタンスを呼び出すプログラムの初期段階は、サービス開始の初期段階と同様にどこかでデバッグする必要があることです。問題は、サービスの開始だけでなく別々のスレッドに送信されるため、通常の端末のstdioが正常に見つかったにもかかわらず、起動コマンドの通常の>パイプラインが使用されないことです。ただし、何らかの理由で端末で実行するようにデスクトップファイルを構成しても問題は解決しません。正常にリリースされると、予想通りにPlarium PlayのElectron GUIが表示されます。

この結論が正しいと仮定する場合(そうでないと思われる場合は教えてください)、Plarium Playが起動しないようにサーバー起動スレッドで試したstdioアクセスを/ dev / null(またはどこにでも)にパイプするにはどうすればよいですか?ログインするたびに、まずコマンドラインから?

答え1

デスクトップファイルを実行すると、ファイルディスクリプタ標準入力(0)、標準出力(1) そして標準エラー(3) 閉じます。あなたのアプリケーションは(少なくとも)書くことができると予想しています。標準出力ただし、ファイル記述子が開いていないため、プログラムが中断されます。

解決策は記述子を開き、次にリダイレクトすることです/dev/null

application >/dev/null 2>&1

順序が重要です。まずリダイレクトします。標準出力その後、記述子2をリダイレクトします(標準エラー)コピー記述子1(標準出力、今に添付されています/dev/null

関連情報