11

プロセスが実行されているかどうかを自動的に確認しようとしており、それに応じて次の手順を実行する必要があります。bash スクリプトを作成しましたが、機能していないようです。

if ps aux | grep [M]yProcessName > /dev/null
then
  echo "Running"
else
  echo "Not running"
fi

私のif発言は間違って使用されていますか?

4

10 に答える 10

11

特定のプロセス (既知の pid のプロセス) が実行されているかどうかは知りたくありませんが (これは/proc/1234/、pid 1234 の存在するかどうかをテストすることで確認できます)、特定のコマンド (または特定の実行可能ファイル) を実行しているプロセスがあるかどうかは知りたくないでしょう。

kill(2)システムコールは、特定のプロセスが実行されているかどうかを確認するために移植可能に使用できることに注意してください (例: 0 シグナルkill(pid,0))。これは、プログラム内から、既知の pid のプロセスがまだ存在し、実行中 (または待機中) であることを確認する一般的な方法です。

このコマンドを使用して、pidof実行可能ファイルを実行しているプロセスを見つけることができます。たとえばpidof zsh、すべてのzshプロセスを見つけることができます。使用することもできますkillall -s 0 zsh

pgrepまた、ユーティリティと/procファイルシステムに興味があるかもしれません。

于 2012-11-07T06:51:58.037 に答える
6
ps aux | grep [M]yProcessName | grep -v grep
于 2014-05-04T14:15:50.413 に答える
2

解決策があります:

if [ "$(ps aux | grep "what you need" | awk '{print $11}')" == "grep" ]; then ... elif [ ... ]; then ... else ... fi

これは Debian 6 で問題なく動作します。'{print $11}' が必要です。これは、システムが grep もプロセスとして扱うためです。

于 2013-06-14T15:46:06.847 に答える
2
processid =$(ps aux | grep 'ProcessName' | grep -v grep| awk '{print $2}')

上記のコマンドは、プロセス ID を提供します。そのプロセスIDを変数に割り当てて、これを行います -->

if cat /proc/$processid/status | grep "State:  R (running)" > /dev/null
then
  echo "Running"
else
  echo "Not running"
fi
于 2014-03-10T07:43:25.697 に答える
1

-zを使用して文字列が空かどうかを確認すると、次のように機能する可能性があります。

line=$(ps aux | grep [M]yProcessName)
if [ -z "$line" ]
then
    echo "Not Running"
else
    echo $line > /dev/null
    echo "Rinnung"
fi
于 2012-11-06T23:36:33.323 に答える
0

私のシステムでは、ps aux | grep ProcessName常に次のようなgrepプロセスの行を取得します。

edw4rd     9653  0.0  0.0   4388   832 pts/1    S+   21:09   0:00 grep --color=auto ProcessName

したがって、終了ステータスは常に0です。おそらくそれがスクリプトが機能しない理由です。

于 2012-11-07T13:16:17.800 に答える
0

戻り値 0 は成功を意味し、他は失敗しました

kill -0 `pid`; echo $?
于 2016-09-09T06:55:21.500 に答える
0

この回答が暗示している方法を明示的に言及することpgrepは、プロセス名でこれを行う最良の方法です。

pgrep [M]yProcessName

名前が "[M]yProcessName" に一致するプロセスが実行中の場合、pgrepはその PID を stdout に出力し、 code で終了します0。それ以外の場合は、何も出力せず、 code で終了します1

于 2021-08-02T16:00:33.063 に答える
-1

これを試して

ps aux | grep [M]yProcessName | grep -v grep
于 2012-11-07T01:35:45.277 に答える