C プログラムで exec("/bin/sh") を使用してシェルを起動します。「sh」プロセスによって起動された処理を追跡するにはどうすればよいですか? たとえば、この /bin/sh プロセスで 'ls' と入力すると、'ls' の pid を取得し、終了時に通知されるようにします。
編集:
私の質問をより一般的にするために。自分で起動したプロセスによって起動されたプロセスをどのように追跡しますか?
C プログラムで exec("/bin/sh") を使用してシェルを起動します。「sh」プロセスによって起動された処理を追跡するにはどうすればよいですか? たとえば、この /bin/sh プロセスで 'ls' と入力すると、'ls' の pid を取得し、終了時に通知されるようにします。
編集:
私の質問をより一般的にするために。自分で起動したプロセスによって起動されたプロセスをどのように追跡しますか?
あなたの子がそれ自身の子 (あなたの孫) を起動したとき、またはこの孫が終了したときに直接通知を受けたい場合は、あなたの子を追跡する必要があります。これを行う移植可能な方法はありません。
Linux では、ptrace()
システム コールを使用してこれを行うことができます。gdb
基本的に、またはのように、子プロセスに接続されたデバッガーになりますstrace
。他のオペレーティング システムにも同様の機能があります。ただし、いくつかの副作用があり、その使用はできればテストとトラブルシューティングに限定する必要があります。
あなたができる唯一の移植可能なことは、繰り返し出力を見て、ps
あなたの子を親として持つプロセスをチェックすることです.このアプローチも手間がかかります。