我总是很犹豫要不要跑kill -9,但我看到其他管理员几乎是例行公事。
我认为可能有一个明智的中间立场,所以:
kill -9使用?什么时候,为什么不呢?我常常感到困惑的是,尽管我从事计算机专业工作几十年,Linux 工作十年,但我实际上将操作系统的大部分功能视为黑匣子,与魔术没什么两样。
今天我想到了这个kill命令,虽然我每天多次使用它(无论是“正常”还是-9风格),我必须承认我完全不知道它在幕后是如何工作的。
在我看来,如果一个正在运行的进程被“挂起”,我会调用kill它的 PID,然后它突然不再运行了。魔法!
那里到底发生了什么?联机帮助页谈论“信号”,但这肯定只是一种抽象。发送kill -9到进程不需要进程的合作(如处理信号),它只是将其杀死。
我真的很想知道这一切!
我知道它pkill比killall. 我的问题是,有什么区别:
pkill [signal] name
Run Code Online (Sandbox Code Playgroud)
和
killall [signal] name
Run Code Online (Sandbox Code Playgroud)
我读过它killall更有效并杀死与name程序匹配的所有进程和子进程(以及递归)。 pkill也不这样做吗?

如果您查看STAT column上图,您会看到Ss S S< SN and R+
这表示什么?Process states. 如果是,那么意义'Ss S< SN and R+'何在?
用于进程创建的 UNIX 系统调用 fork() 通过复制父进程来创建子进程。我的理解是,这之后几乎总是调用 exec() 来替换子进程的内存空间(包括文本段)。在 fork() 中复制父级的内存空间对我来说总是很浪费(尽管我意识到可以通过使内存段在写时复制从而只复制指针来最小化浪费)。无论如何,有谁知道为什么流程创建需要这种复制方法?
一些答案中使用了“subreaper”这个词。搜索谷歌也会出现“刚刚使用”这个词的条目。
我如何理解什么是“子收割者”?
当我过去killall -9 name杀死一个程序时,状态变成僵尸。几分钟后,它真的停止了。那么,在那几分钟里发生了什么?
例如,我们希望看到:
PROCESS IF TX RX FILE(regular) R/W
prog1 eth0 200kB/s 12kB/s -- --
wlan0 12kB/s 100kB/s -- --
-- -- -- file1 R
-- -- -- file2 R
-- -- -- file3 W
prog2 eth0 0kB/s 200kB/s -- --
-- -- -- file4 W
-- -- -- file5 W
Run Code Online (Sandbox Code Playgroud)
这可能吗?nethogs 只显示 TX/RX,而 lsof 只显示文件访问。
我目前正在做一个像这样的两步过程:
sudo nethogs
sudo lsof -a -d 1-999 -c hogging_program /
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
由于 google chrome/chromium 产生多个进程,因此很难看到这些进程总共使用了多少内存。
有没有一种简单的方法可以查看一系列连接的进程使用了多少总内存?