
私が殺したばかりのものを知る方法はありますか?
$ ps -A -o pid,cmd | grep someApp | grep -v grep
2802 python someApp.py
$ sudo kill 2302
$
編集する:明確にするには、PID 2302を終了する前にPID 2302が何であるかを知る必要があります。このps
引用は、私がそれが何であるかもしれないまま2302をどのように殺したかを説明するためのものです。
答え1
知っている普遍的な方法はありませんが、手がかりがあるかもしれません。
KILL信号の代わりにTERM信号を送信したので、プログラムは信号ハンドラを実行する機会がありました。まったく死んでいない可能性があり、どこかにログエントリを残した可能性があります。プロセスがまだ実行中であることをps 2302
確認し、そうでない場合はシステムログを確認してください。
可能であれば、すべてのプロセスのログがあります。プロセス会計有効です。これはLinuxで次のように実行できます。GNUアカウントただし、ほとんどのディストリビューションでは、このパッケージはデフォルトでインストールされません。プロセスアカウントが有効になっている場合は、次を実行します。lastcomm
(最新のものから)最後に終了したプロセスを表示するには、root権限が必要な場合があります。を使用すると、lastcomm
PIDや引数ではなくコマンド名のみが追跡されます。環境マッチングを介してどのプロセスかを把握する必要があります。 Linuxでは、lastcomm
プロセスが終了した日付が表示されますが、1分単位で表示され、コマンドがシグナルで終了X
した場合は、コマンド名の後にフラグが付けられます。
GNU acctはプロセスIDを含む追加情報を追跡しますが、lastcomm
コマンドはそれを表示しません。以下を実行する必要があります。dump-acct
、残念ながら、コマンドが信号によって終了したかどうかは示されません。
dump-acct /var/log/account/pacct | awk -F '|' '$10 ~ / *2302($| )/'
Linux監査など、プロセスを記録できる他のサブシステムもありますが、通常はそうするように構成されていません。
答え2
システムで生成されたすべてのプロセス(監査またはプロセスアカウントなど)を記録する方法を使用しない限り、明確な方法はありません。
これで試すことができるものは次のとおりです。
- プロセスはpidを含む(syslogなどを介して)コンテンツを記録できるため、
zgrep -w 2302 /var/log/**/*(.m-1)
それを識別するために(zsh構文)を実行できます。 - そのプロセスまたはその親プロセスがプロセスの終了を報告するために何かを記録した可能性があります。終了後に変更されたファイルを見て、手がかりがあるかどうかを確認できます(グラフィカルに
.xsession-errors
ログインした各ユーザーの/再var/を確認してください)。ログ、出力を見て、lsof -nP
現在開いているログファイルに似たエントリがあることを確認してください...)... - マシンに作成されたプロセスがあまりない場合は、2302に近いpidと起動時間を確認してください。 2302は、親または子であっても、どのユーザーがそれを作成したかを示すことができる関連コマンドです。
- 一部のユーザーの端末で作成された場合、どの端末の変更時間が終了時間と一致するかを確認することができ、
/dev
検索範囲を再絞り込むのに役立ちます。
答え3
いいえ、ありません。後でそうではありません。
ただし、killコマンドの前に「ps -A> list」を実行すると、プロセスを終了する前に実行されていたすべてのプロセスのリストを含むlistという名前のファイルが生成されます。