プロセスを自動的にデーモン化し、バックグラウンドで実行するプログラムがあります。
このプログラムを強制的にフォアグラウンドで実行する方法はありますか?これをスクリプトに入れて、戻りコードをキャプチャして正常に終了することを確認したいと思います。
ベストアンサー1
プロセスがデーモン化されると、自分を分岐し(少なくとも1回)、親プロセスがすぐに返され、子プロセスが操作を完了します。
その子が死んだら、もう親はいません。またはむしろinit
(id 1のプロセス)によって採用されました。init
終了ステータスを取得できます。
Linuxでは、カーネル3.4以降、次のコマンドを使用して、孤児プロセス(子と子について)を採用するプロセスを変更できます。PR_SET_CHILD_SUBREAPER
prctl()
。
だから、非常に似た質問と回答、Linux 3.4+では子供用収穫機そして孤児となった子孫の終了状態を報告するようにします。
ここで使用してperl
ハードコードされた値は次のとおりですPR_SET_CHILD_SUBREAPER
prctl()
。
perl -MPOSIX -le '
require "syscall.ph";
syscall(&SYS_prctl,36,1) >= 0 or die "cannot set subreaper: $!";
if (!fork) {
exec @ARGV;
exit(127);
}
# now reporting on all children and grand-children:
while (($pid = wait) > 0) {
print "$pid: " . WEXITSTATUS($?)
}' your-daemon here