実行中のプロセスを確認する

実行中のプロセスを確認する

よく知らないプロセスをチェックしてシャットダウンするように求められます。binlsフォルダーの下には複数のプロセスがあります.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」のようなソフトウェアは素晴らしい仕事をすると思います。

タイプ:

top

または

htop

答え4

@invert からの回答では多くのことが説明されていますが、シェル スクリプトは単にその内部のコマンドを実行するだけです。つまり、またはの出力でシェル スクリプト名が取得されずtophtopシェル スクリプト内の各ルーチンの /proc/$PID/cmdline が印刷されるだけです。

echo $!必要な PID を取得するには、after コマンドを使用するほかに、pgrep必要なときにコマンドを使用します (または、強制終了する場合は pkill を使用します)。

pgrep、pkill - 名前やその他の属性に基づいてプロセスを検索またはシグナルする

pgrepは、/proc/*/cmdline経由で引数をgrepし、一致するPIDを出力します。pkillはkillと互換性があるため、cmdlineを使用して任意のルーチンを簡単にpkillできます。

関連情報