除了最暴力的kill -9(SIGKILL),我不太明白其他 3 个常见信号(此处)-HUP(1)、-INT(2)和-TERM(15)之间的区别。
在哪些情况下,一种有效而另一种无效?
一般什么时候-9( -KILL) 失败?
对我来说,他们似乎要求进程优雅地终止,而不保存. 评价严酷程度,我会放-HUP < -TERM < -INT < -KILL。
当我安装一个简单的程序时,它经常使用make && make install并且通常甚至没有卸载目标。
如果我想升级一个程序,假设它只是无缝地重写旧程序是标准协议吗?
我如何跟踪这些程序;大多数人是否只是“一劳永逸”,如果没有给出卸载目标,我是否必须手动删除所有内容?
我知道 strace 和 ltrace,但这只能分别告诉我进程正在执行哪些系统调用和库调用。我想确切地知道进程正在执行哪些指令。如果可能的话,要么是汇编,要么是 C 和汇编之间的某种中间立场。假设二进制文件没有用调试符号编译,所以更有可能倾向于第一个选项。
用例:进程似乎挂起,strace 或 ltrace 没有输出。确定进程是否正在做“某事”。我意识到这可能很难确定,因为我认为这类似于解决停机问题。但是,有可能收集有用的数据。
第二个用例:好奇心。将整个汇编指令列表转储到文本列表会很有趣。
我的猜测是我可以使用 gdb 来做到这一点,但不确定如何,因为这不是关于调试我编写的程序,而是关于使用 gdb 检查正在运行的进程的健康状况。
操作系统是 CentOS 6。
load average: 20.62, 18.83, 11.31
Run Code Online (Sandbox Code Playgroud)
这是四核处理器上的平均负载。我正在运行的程序不仅占用 CPU,还占用其他资源。
如何仅使用 CPU 显示此类数字?