1

私はUnixが初めてです。agent.sh を実行したときに作成されたプロセスを見つける方法を教えてください。

ps -ef | grep エージェント

何も返しません。

ありがとう、キラン

4

1 に答える 1

1

たとえば、次のようなツールを使用して、子プロセスを簡単に識別できます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スクリプトでは使用しないでください。

于 2012-07-26T05:05:24.383 に答える