こんにちは、私はさまざまなフォーラムを検索しましたが、ここでもLinuxとMacの答えを見つけることができましたが、Unixと特にKorn Shellの解決策を見つけることができませんでした。
プロセスID(PID)からプロセス名(コマンド名)を取得する方法
私は以下のコマンドを試しました
ps -eaf | awk '{ print substr($0, index($0, $9)) }'
上記のコマンドは、月と日付ではなくTIMEが指定された時点で失敗します(この場合、文字列には8列しかありません)
任意の提案が役立ちます。
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
もしあなたの ps | awk
解決策はps
の出力があなたの望むものではないので失敗しています。
ps -eaf -o pid,cmd | awk '/regex-to-match-command-name/{ print $1 }'
ps -C <the-name> -o etime=
私のpsはprocps-ngからです。