私が理解している限り、system()
呼び出しは内部的fork()
に使用exec()
されますが、処理を容易にするためにそれらをカプセル化します。
system()
呼び出しで作成された子プロセスからPIDを取得することは可能ですか?
目的:特定のタイムアウト後に子プロセスをSIGINTできるようにしたい。とを使用してsystem()
関数を再構築できます。しかし、私が必要とするのは子供のPIDだけであり、おそらく?fork()
exec()
system()
通常、system()
は同期操作です。これは、子プロセスが存在しなくなるため、子が終了するまで戻らないことを意味します。つまり、子プロセスがsystem()
戻るときに、子プロセスの有効なPIDがありません。
を使用するときに(私が知っている)方法はありませんsystem()
。さらに、system()
コマンドを実行するシェルを起動する追加の手順があるため、これは少し難しくなります。fork()
おそらく、とに置き換えたほうがよいでしょうexec()
。
ただし、/proc ファイル システムを介して必要なことを行う方法があります。プロセス ディレクトリ (ディレクトリ名は PID) を調べて、「ステータス」ファイルを確認できます。それぞれに、親 pid を指定する PPid エントリがあります。
このようにして、プロセスの PID を PPID として指定する「ステータス」ファイルを取得した場合、/proc ファイル システム内のそのフォルダー名が探している値になります。