プログラムをフォアグラウンドで強制的に実行する方法

プログラムをフォアグラウンドで強制的に実行する方法

プロセスを自動的にデーモン化し、バックグラウンドで実行するプログラムがあります。

このプログラムを強制的にフォアグラウンドで実行する方法はありますか?これをスクリプトに入れて、戻りコードをキャプチャして正常に終了することを確認したいと思います。

ベストアンサー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

おすすめ記事