私はCでプログラムを書いています。フォークされた子プロセスでexecve()を実行して未知のアプリケーション(コマンドラインでユーザーが指定したもの)を実行するために、fork()をメインプロセスで行います。私は実行されたアプリケーションのプロセスのPIDを知っています - それはfork()によって返されますが、この未知のアプリケーションは何度もfork()することができますし、すべての子プロセスのPIDはわかりません(メインの親プロセスの孫です)。メインの親プロセスをチェックするにはどうすればいいですかいつ子プロセス(それは未知のアプリケーションです)とALL未知のアプリケーション出口の子ですか? (私は子供がどれくらいいるか分からず、これらの子供のPIDも知らない)。Linuxプロセスとそのすべての子プロセスがいつ終了するかを確認するにはどうすればよいですか?
答えて
これは、親プロセスをサブリカーにすることで実行できます。下位派は子孫によって孤立したすべての子を取得します。子孫は、通常は常にinit(プロセスID 1)に移動します。興味のある子プロセスをフォークする前に、サブリバーのステータスを有効にする必要があります。これが完了すると、waitpid()
または同様の呼び出しは、ツリー全体がなくなったときにエラー[ECHILD]
を返すまで、子プロセスとすべての孤立した子孫を返します。
、これはprctl()
のPR_SET_CHILD_SUBREAPER
オプションを使用して有効になっているとFreeBSD上で、これは(詳細については、manページを参照してください)procctl()
PROC_REAP_ACQUIRE
コマンドを使用して有効になっています。
Linuxでは、このように1つの子プロセスのみを監視することができます。なぜなら、孤児は元のフォークコールから孤立したものを覚えていないからです。 FreeBSDでは、PROC_REAP_GETPIDS
は個々のサブツリーを区別することができますが、ツリーには多くのプロセスが含まれていると効率的ではありません。
1つの子が終了したかどうかを知るために、waitpid(-1、NULL、WNOHANG)を使用できます。正の数(pid)を受け取った場合、1人の子供が出た。親プロセスには、子プロセスが終了したかどうかを確認するためにこのコマンドを使用している場合、xという子プロセスの量が0より大きいかどうかを確認する行があります。 x個のアイテムがある場合は、アイテムの増分xを追加するときと、減分xを終了するときに増分します。あなたが持っている子供の数xがゼロのとき、あなたの子供たちはすべて殺されました。
- 1. 親プロセスによって子プロセスを強制終了するにはどうすればいいですか?
- 2. 子プロセス内のSIGINTが親プロセスに伝播し、親プロセスを強制終了させないようにするにはどうすればよいですか?
- 3. WindowsプロセスがC++で別のWindowsプロセスが親プロセスであるかどうかを確実に確認するにはどうすればよいですか?
- 4. プログラムのすべてのプロセスを強制終了するにはどうすればよいですか?
- 5. ReactPHP:終了プロセスと終了プロセスの違いは何ですか?
- 6. プロセスIDを取得してnohupプロセスを強制終了するにはどうすればいいですか?
- 7. Jenkinsジョブから開始された子プロセスを終了するにはどうすればよいですか?
- 8. Qtのすべてのプロセスがkeyeventsで終了するまで、どうすればいいですか?
- 9. プロセスが終了したかどうかを確認するには?
- 10. プロセスをアイドル状態にしてから、Windowsバッチファイルからプロセスを終了するまで、プロセスを実行するにはどうすればよいですか。
- 11. Microsoft.WindowsAzure.Storage.DataMovement.TransferManagerのCopyDirectoryAsyncがいつ終了したかを確認するにはどうすればよいですか?
- 12. プロセスを終了するときにlogout()を実行するにはどうすればよいですか?
- 13. プロセスが実行中かどうかを確認するLinuxスクリプト
- 14. 終了確認を避けるにはどうすればよいですか?
- 15. FFmpegプロセスが完了しているかどうかを確認する方法
- 16. fork()プロセスが終了したかどうかを確認するPython
- 17. Linuxのプロセス:すべての子プロセスをスリープ状態にする。
- 18. Cでは、親プロセスが終了すると、子プロセスは自動的に終了しますか?
- 19. 死にかけているプロセスのコールスタックを取得する方法、つまりプロセスがどのように終了しているかを調べる方法
- 20. どのように正常に終了する子プロセスを数えますか?
- 21. C++でプロセスを強制終了して再起動するにはどうすればよいですか?
- 22. Linux - パスでプロセスを終了する
- 23. C#:プロセスの終了時にプロセスが終了する(タスクマンで)
- 24. ユーザーセッションごとに実行中のプロセスを確認するにはどうすればよいですか?
- 25. Node.js子プロセスがSIGTERMで終了する
- 26. KeyboardInterruptでプロセスが終了しないようにするには?
- 27. 現在のプロセスの実行が親プロセスかどうかを確認するにはどうすればよいですか?
- 28. 親プロセスがすべての子プロセスを待つようにする
- 29. Linuxでプロセスが実行されているPHPスクリプトを知るにはどうすればよいですか?
- 30. プロセスがLinuxのシステムプロセスであるかどうかを確認するにはどうすればよいですか?
[親プロセスから子プロセスを取得する方法](http://stackoverflow.com/questions/17743879/how-to-get-child-process-from-parent-process) – klutt
私はかわいいです確かにあなたはそれを通常の手段で行うことはできません。多分 'ptrace'を含む何か? – melpomene
アプリはその子を処理する必要があります。あなたはそれらについて心配する必要はありません。 – PSkocik