将 SIGKILL 发送到交换进程是否在杀死之前取消交换它?

Ada*_* W. 6 linux process kill swap virtual-memory

假设我想用交换(实际上是一个 zram)终止 Linux 机器上的一个进程。交换是 RAM 大小的一半。RAM 中只有 10% 的可用空间,交换区也几乎满了。

该进程仅使用了 2% 的 RAM,但使用了大约 90% 的交换空间。

执行软关闭 (SIGTERM) 并允许进程捕获信号并自行关闭将导致取消交换所有交换的映射,但没有足够的可用 RAM 来适应整个进程。

因此,使用 SIGKILL 终止进程可能会更好,但我仍然担心 OOM-killer 会因内存不足而终止其他进程甚至整个 X 会话或 init。

那么发送一个终止信号会让内核将进程的交换部分移动到物理内存中吗?我应该期待什么?它取决于内核的版本吗?

如果是这样,在这种情况下该怎么办?目标是在不触及其余进程的情况下终止进程(还有其他重要进程正在运行)。

此外,当它不是一个进程而是一个进程的树并且我不能让应用程序自行终止时,如何正确杀死它?

小智 0

关于杀死整个进程树,您可以尝试以下操作:

# in pid is saved pid of the parent process
CPIDS=`pgrep -P $pid` # gets pids of child processes
for cpid in $CPIDS ; do kill -9 $cpid ; done # first kill children
kill -9 $pid # then the parent (yeah, that sound kinda bad)
Run Code Online (Sandbox Code Playgroud)