私はUnixが初めてです。agent.sh を実行したときに作成されたプロセスを見つける方法を教えてください。
ps -ef | grep エージェント
何も返しません。
ありがとう、キラン
たとえば、次のようなツールを使用して、子プロセスを簡単に識別できますpstree
(これは、人間が判読できる出力を作成するための非標準プログラムです)。
~ $ pstree -ps "$PPID"
init(1)───tmux(9707)─┬─bash(9708)─┬─bash(9742)───trayer(9743)
│ └─weechat-curses(10594)
├─bash(10729)───su(10746)───bash(10752)───vim(10761)
├─bash(10818)───ksh(1748)
├─bash(15133)───pstree(15474)
├─bash(17879)───man(15076)───sh(15079)───sh(15080)───vimmanpager(15084)───vim(15088)
├─bash(17900)───su(17917)───bash(17922)
├─bash(20076)───man(20095)───sh(20098)───sh(20099)───vimmanpager(20103)───vim(20109)
├─bash(20116)───man(20135)───sh(20138)───sh(20139)───vimmanpager(20143)───vim(20147)
└─tmux-mem-cpu-lo(15472)
生データが必要な場合は、少なくとも Linux では、/proc/<pid>/stat
再帰的にクロールできます。おそらく使用することもできますps
が、その出力の解析は私がやりたいことではありません。
しかし、あなたの質問は「シェルによって作成されたすべてのプロセスを識別できますか」でした。技術的には、いいえ。を使用disown
または実行するnohup
場合、特に親プロセスが停止した場合、子は別のシェルからフォークされたプロセスの子にinit
なり、区別できなくなります。
その場合の解決策はプラットフォーム固有です。Linux では、サポートがカーネルに組み込まれている場合、cgroupを使用できます。私が信じているBSDの同等物は「刑務所」と呼ばれています。
また、開発とテスト以外の理由でスクリプトの一部としてプロセスを追跡しようとしている場合は、適切なプロセス管理を使用する必要があります。ps
スクリプトでは使用しないでください。