有什么办法可以查出我刚才杀了什么?
$ ps -A -o pid,cmd | grep someApp | grep -v grep
2802 python someApp.py
$ sudo kill 2302
$
Run Code Online (Sandbox Code Playgroud)
编辑:为了澄清,我需要在杀死它之前知道 PID 2302 是什么。这ps
条线是为了说明我是如何杀死 2302 的,而我什至不知道它是什么。
没有一般的方法可以知道,但你可能有线索。
您发送了一个 TERM 信号,而不是一个 KILL 信号,这样程序就有机会运行信号处理程序。它可能根本没有死,或者它可能在某处留下了日志条目。检查进程是否仍在运行 ( ps 2302
),如果没有,请检查您的系统日志。
如果启用了进程记帐,则会有所有进程的日志。这可以通过GNU acct在 Linux 上获得,但对于大多数发行版,默认情况下不安装该软件包。如果启用了进程记帐,请运行lastcomm
(您可能需要是 root 用户)以查看最近被杀死的进程(最新的在前)。使用lastcomm
,仅跟踪命令名称,而不跟踪 PID 或参数;您必须通过环境匹配来确定它是哪个过程。在 Linux 下,lastcomm
显示进程退出的日期,但只有 1 分钟的粒度,X
如果命令被信号杀死,则在命令名称后面有一个标志。
GNU acct 跟踪更多信息,包括进程 ID,但该lastcomm
命令不显示它:您必须运行dump-acct
,不幸的是,它没有指示命令是否被信号杀死。
dump-acct /var/log/account/pacct | awk -F '|' '$10 ~ / *2302($| )/'
Run Code Online (Sandbox Code Playgroud)
还有其他子系统可以记录进程,例如 Linux 的审计,但它们通常没有配置为这样做。