web-dev-qa-db-ja.com

プロセス名を指定してpidを取得する方法

こんにちは、私はさまざまなフォーラムを検索しましたが、ここでもLinuxとMacの答えを見つけることができましたが、Unixと特にKorn Shellの解決策を見つけることができませんでした。

プロセスID(PID)からプロセス名(コマンド名)を取得する方法

以下の参照から私はSO この1つそしてこの1つ

私は以下のコマンドを試しました

ps -eaf | awk '{ print substr($0, index($0, $9)) }'

上記のコマンドは、月と日付ではなくTIMEが指定された時点で失敗します(この場合、文字列には8列しかありません)

任意の提案が役立ちます。

41
gahlot.jaggs

pgrep を使用する方が簡単だと思います

$ pgrep bluetoothd
441

それ以外の場合は、awkを使用できます。

ps -ef | awk '$8=="name_of_process" {print $2}'

たとえば、ps -efに次のような行がある場合:

root       441     1  0 10:02 ?        00:00:00 /usr/sbin/bluetoothd

その後、ps -ef | awk '$8=="/usr/sbin/bluetoothd" {print $2}'441を返します。


Kshでは、pgrepが見つかりません。そして、他の解決策は、以下のpsコマンドから出力される場合に失敗していますjaggsmca325 7550 4752 0 Sep 11 pts/44 0:00 sqlplus dummy_user/dummy_password @ dummy_schema

最後の列($NF)を、その番号に関係なく確認しましょう。

$ ps -ef | awk '$NF=="/usr/sbin/bluetoothd" {print $2}'
441

正確ではない文字列と一致させたい場合は、代わりに~を使用できます:

$ ps -ef | awk '$NF~"bluetooth" {print $2}'
441
1906
71
fedorqui

pidofを使用して、p_nameという名前の実行中のプロセスのすべてのIDを取得できます。
pidofp_name | tr ' ' '\n'(垂直リスト用)
pkillp_namep_nameという名前のすべてのプロセスを強制終了します
[〜#〜] nb [〜#〜]すべてを殺す許可を持っていることを確認してください:)

6
k-messaoudi

もしあなたの ps | awk解決策はpsの出力があなたの望むものではないので失敗しています。

ps -eaf -o pid,cmd | awk '/regex-to-match-command-name/{ print $1 }'
2
William Pursell
ps -C <the-name> -o etime=

私のpsはprocps-ngからです。

1
numeric