1

ネット上で面白い問題を見つけました。参考までにここに再現します。

プログラムを実行し、プログラムが;daemon以外のステータスで終了した場合にプログラムを再起動するプロセスを 作成しています。EXIT_SUCCESSしかし、これらのプログラムは、おそらくそれ自体がデーモンプロセスになることを望まないでしょう。使用fork()してから呼び出すexecv()と、新しい子プロセスもデーモンプロセスになりますか?

Firefoxを実行してみましたが、機能しませんでした。それで、その場合、どうすれば子プロセスを通常のプロセスとして開始できますか?

そのサイトで提供されているソリューションは、どういうわけか私を納得させません。何か案は?

4

1 に答える 1

0

デーモンプロセスによって、stdin、stdout、およびstderrのファイル記述子がどのttyまたはptsにも接続されていないことを意味する場合は、はい。したがって、stdin、stdout、およびstderr用に何かを開くだけで機能するはずです。

ただし、最初に自分で試してみる必要があります。firefox(ここ)は、stdin、stdout、およびstderrがにリダイレクトされた状態で完全に開きます/dev/null。主なことは、変数を呼び出すexecv()execve()、保持することだと思います。DISPLAY

編集
元の記述子の宛先に再接続する方法を尋ねる場合、少なくともポータブルな解決策はありません。明らかに、パイプに再接続することはできません。ただし、(少なくともLinuxでは)元のtty / ptsに再接続したり、(ファイルシステムとを使用して/proc)ファイルに再接続したりすることはできますreadlink()。ただし、「シーク」を推測する必要があります(たとえば、元のコマンドがだった場合foo 2>> bar)。

于 2012-07-17T11:26:11.660 に答える