如何在Linux中通过进程ID(PID)终止一个进程

4

我是linux新手,正在编写一个程序,输入进程名称,获取其PID(这部分没问题),然后将PID传递给kill命令,但是它无法正常工作。大致代码如下:

read -p "Process to kill: " proceso
proid= pidof $proceso
echo "$proid"
kill $proid

有人能告诉我为什么它没有被杀死吗?我知道还有其他一些方法可以做到,甚至使用PID,但是对我来说都不起作用。我相信这是Bash语言的某种问题(我刚刚开始学习)。

8个回答

7

改为此方式:

proid= pidof $proceso
您可能指的是这个:
proid=$(pidof $proceso)

即使如此,程序可能不会被杀死。默认情况下,kill PID 发送 TERM 信号到指定的进程,给它一个机会以有序的方式关闭,例如清理它正在使用的资源。发送一个最强的信号来杀死进程而不进行优雅的清理是使用 KILL,使用 kill -KILL PIDkill -9 PID

我认为这是 bash 语言的某种问题(我刚开始学习)。

你发布的原始行,proid= pidof $proceso 应该会引发一个错误,并且 Bash 会打印一个错误消息。调试问题始于阅读和理解软件试图告诉你的错误消息。


非常感谢大家!我尝试了你们提供的所有解决方案,但问题就在你们指出的地方。我不知道我必须将所有表达式放在()之间,并以$开头。现在我会更加关注它,谢谢! - undefined

4
使用以下命令显示进程的端口和PID:
sudo netstat -plten 

然后
kill -9 PID

这是一个示例,用于终止运行在端口8283上且PID为25334的进程。

enter image description here


2

kill 命令需要你告诉它 **如何杀死** 进程,因此有64种不同的方法可以杀死进程 :) 它们都有名称和编号。其中最致命的是 -9。一些有趣的信号包括:

  • SIGKILL - SIGKILL (也是 -9) 信号强制进程立即停止执行。程序无法忽略此信号。该进程也没有机会进行清理。
  • SIGHUP - SIGHUP 信号断开进程与父进程之间的连接。这也可用于重启进程。例如,“killall -SIGUP compiz”将重新启动 Compiz。这对于具有内存泄漏的守护程序非常有用。
  • SIGINT - 此信号与按下 ctrl-c 相同。在某些系统上,“delete”+“break”发送相同的信号到进程。该进程被中断并停止。但是,该进程可以忽略此信号。
  • SIGQUIT - 这类似于 SIGINT,但具有使进程生成核心转储的能力。

0

我遇到了一个类似的问题,只想每天运行几个小时的监控(视频监视)。 写了两个sh脚本;

cat startmotion.sh

#!/bin/sh
motion -c /home/username/.config/motion/motion.conf

第二个; cat killmotion.sh
#!/bin/sh
OA=$(cat /var/run/motion/motion.pid)
kill -9 $OA

这些是在预定时间从crontab调用的。
ctontab -e
0 15 * * * /home/username/startmotion.sh
0 17 * * * /home/username/killmotion.sh

非常简单,但这就是我所需要的全部。


0
根据你所提供的内容,看起来你在proid变量中没有获取到实际的PID。如果你想要捕获pidof的输出,你需要用反引号将该命令括起来,这是旧形式的命令替换
proid=`pidof $proceso`

...或者对于新形式的命令替换也可以这样。

proid=$(pidof $proceso)

我意识到了,你们告诉我之后哈哈,非常感谢! - undefined

0
尝试使用"kill -9 $proid"或者"kill -SIGKILL $proid"命令。如果您需要更多信息,请点击

SIGKILL应该只作为最后的手段使用:它阻止进程正常关闭。更多详情请参考当不应该使用kill -9命令终止进程? - undefined

0
尝试一下 kill -9 它会终止括号中给定PID的任何进程

0

你必须在kill语句中发送SIGKILL标志。 kill -9 [pid] 如果你不这样做,操作系统将选择在方便的时候杀死进程,而SIGKILL(-9)会告诉操作系统立即杀死进程,而不会忽略命令直到以后。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接