相关疑难解决方法(0)

Linux 如何“杀死”一个进程?

我常常感到困惑的是,尽管我从事计算机专业工作几十年,Linux 工作十年,但我实际上将操作系统的大部分功能视为黑匣子,与魔术没什么两样。

今天我想到了这个kill命令,虽然我每天多次使用它(无论是“正常”还是-9风格),我必须承认我完全不知道它在幕后是如何工作的。

在我看来,如果一个正在运行的进程被“挂起”,我会调用kill它的 PID,然后它突然不再运行了。魔法!

那里到底发生了什么?联机帮助页谈论“信号”,但这肯定只是一种抽象。发送kill -9到进程不需要进程的合作(如处理信号),它只是将其杀死。

  • Linux 如何阻止进程继续占用 CPU 时间?
  • 是否从调度中删除?
  • 它是否断开进程与其打开的文件句柄的连接?
  • 进程的虚拟内存是如何释放的?
  • 内存中是否有一个全局表之类的东西,Linux 保留对进程占用的所有资源的引用,当我“杀死”一个进程时,Linux 只是简单地遍历该表并一个一个地释放资源?

我真的很想知道这一切!

process kill process-management

94
推荐指数
1
解决办法
2万
查看次数

进程终止时的默认退出代码?

当一个进程被一个可处理的信号杀死时,例如SIGINTorSIGTERM但它不处理该信号,该进程的退出代码是什么?

对于无法处理的信号,例如SIGKILL?

据我所知,杀死进程SIGINT可能会导致退出代码130,但这会因内核或外壳实现而异吗?

$ cat myScript
#!/bin/bash
sleep 5
$ ./myScript
<ctrl-c here>
$ echo $?
130
Run Code Online (Sandbox Code Playgroud)

我不确定如何测试其他信号...

$ ./myScript &
$ killall myScript
$ echo $?
0  # duh, that's the exit code of killall
$ killall -9 myScript
$ echo $?
0  # same problem
Run Code Online (Sandbox Code Playgroud)

kill signals exit exit-status

73
推荐指数
3
解决办法
8万
查看次数

为什么内核甚至懒得发送 SIGKILL?

如果程序不允许处理或忽略 SIGKILL 和 SIGSTOP,并且必须立即终止,为什么内核还要向程序发送信号?内核不能简单地从 CPU 和内存中驱逐程序吗?我假设内核有能力直接做到这一点。

kernel signals

8
推荐指数
2
解决办法
2838
查看次数

SIGKILL 与断电

突然断电和SIGKILL在运行程序上有什么区别?

我们有使用数据库的微服务。我的任务是创建模拟突然断电的自动测试(不是很好的关机,而是在没有 UPS 的情况下拔掉电源)。意图是在重新启动后,我们要验证数据库是否仍然一致等。我计划使用killall -9 microservice_name. 这个模拟有多好?做一个或另一个更具破坏性吗?我特别担心刷新(或不刷新)文件缓冲区,但也许还有其他区别?

额外问题:当我们与不是实际功率,而是虚拟机的突然杀死相比时会怎样?

shutdown sigkill

0
推荐指数
1
解决办法
45
查看次数