慣れていないプロセスを確認して終了するように求められました。したがって、ls
binフォルダの下にある場合は、いくつかのプロセスが表示されます.sh
。しかし、どのプロセスがどのTomcatプロセスに関連付けられているかを知りたいです。
簡単に知る方法はありますか?
はい startmyprocess1.sh
ただし、これを実行すると、実行ps -ef | grep startmyprocess1
中のプロセスは返されません。
しかし、実際に実行中のTomcatプロセス名は、myprocess
これによりps -ef | grep myprocess
実行中のプロセスを見ることができるからです。これを知るためには、その担当者に問い合わせてください。
だから名前が違います。もしそうなら、私は彼に何度も尋ねなければなりません。この問題を解決するより良い方法はありますか?
答え1
これを試してみてください。、(テストされていません)
ps -aux | grep "yourprocess"
例えば、
ps -aux | grep "httpd"
答え2
実際にstartmyprocess.shでmyprocessを起動してください。いいえデフォルトのシェルスクリプトの後にプロセス名を指定するため、ps -ef | grep startmyprocess1
結果は返されません。
これは、多くのプロセス、特にデーモンが簡単に参照できるように、そのPIDをファイルに書き込む理由でもあります。これは次の方法で行うことができます。
#!/bin/sh
pid=`myprocess`
echo $pid > /tmp/myprocess.pid
あるいは、$!
最後のpidを含むエントリを照会することもできます。
#!/bin/sh
myprocess
echo $! > /tmp/myprocess.pid
そして、pidに基づいてクエリ/リストプロセスを実行します。
ps --pid $PID
答え3
私は「トップ」のようなソフトウェアが素晴らしい仕事をしていると思います。
タイプ:
top
または
htop
答え4
@invertの答えはすでに多くを説明しており、シェルスクリプトはその中のコマンドを実行します。top
つまり、または出力からシェルスクリプト名を取得せずに、htop
シェルスクリプトの各ルーチンに対して/proc/$PID/cmdlineのみを印刷することを意味します。
echo $!
希望のPIDを取得するには、afterコマンドを使用することに加えて。必要に応じてコマンドを使用したいpgrep
(または終了するにはpkill)。
pgrep, pkill - 名前やその他の属性に基づいてプロセスを検索またはシグナルを送信します。
pgrep は単に /proc/*/cmdline を通して引数を収集し、一致する PID を出力します。 pkillはkillと互換性があるため、cmdlineを使用してすべてのルーチンを簡単にpkillできます。