4

私が理解している限り、system()呼び出しは内部的fork()に使用exec()されますが、処理を容易にするためにそれらをカプセル化します。

system()呼び出しで作成された子プロセスからPIDを取得することは可能ですか?

目的:特定のタイムアウト後に子プロセスをSIGINTできるようにしたい。とを使用してsystem()関数を再構築できます。しかし、私が必要とするのは子供のPIDだけであり、おそらく?fork()exec()system()

4

4 に答える 4

8

通常、system()は同期操作です。これは、子プロセスが存在しなくなるため、子が終了するまで戻らないことを意味します。つまり、子プロセスがsystem()戻るときに、子プロセスの有効なPIDがありません。

于 2009-10-15T07:58:52.893 に答える
4

を使用するときに(私が知っている)方法はありませんsystem()。さらに、system()コマンドを実行するシェルを起動する追加の手順があるため、これは少し難しくなります。fork()おそらく、とに置き換えたほうがよいでしょうexec()

于 2009-10-15T08:02:10.430 に答える
-1

ただし、/proc ファイル システムを介して必要なことを行う方法があります。プロセス ディレクトリ (ディレクトリ名は PID) を調べて、「ステータス」ファイルを確認できます。それぞれに、親 pid を指定する PPid エントリがあります。

このようにして、プロセスの PID を PPID として指定する「ステータス」ファイルを取得した場合、/proc ファイル システム内のそのフォルダー名が探している値になります。

于 2010-07-21T14:02:11.933 に答える