如何在linux中通过pid杀死进程

问题描述 投票:0回答:9

我是Linux新手,我正在构建一个程序,该程序接收进程的名称,获取其PID(我对这部分没有问题),然后将PID传递给kill命令,但它不起作用。事情是这样的:

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

有人能告诉我为什么它没有杀死它吗?我知道还有其他一些方法可以做到这一点,即使使用 PID,但它们似乎都不适合我。我相信这是 Bash 语言(我刚刚开始学习)的某种问题。

linux bash process command kill
9个回答
20
投票

使用以下命令显示进程的端口和PID:

sudo netstat -plten 

然后

kill -9 PID

这是一个杀死在端口 8283 上运行且 PID=25334 的进程的示例

enter image description here


8
投票

而不是这个:

proid= pidof $proceso

您可能是这个意思:

proid=$(pidof $proceso)

即便如此, 该程序可能不会被杀死。 默认情况下,

kill PID
向指定进程发送
TERM
信号, 给它一个有序关闭的机会, 例如清理它正在使用的资源。 在没有正常清理的情况下发送进程杀死的最强信号是
KILL
,使用
kill -KILL PID
kill -9 PID


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

您发布的原始行,

proid= pidof $proceso
应该会引发错误, Bash 会打印一条错误消息。 调试问题首先要阅读并理解软件试图告诉您的错误消息。


2
投票

kill 希望您告诉它**如何杀死*,因此必须有 64 种不同的方法来杀死您的进程:) 它们有名称和编号。最致命的是

-9
。一些有趣的包括:

  • SIGKILL - SIGKILL(也称为
    -9
    )信号强制进程立即停止执行。程序不能忽略该信号。此过程也无法进行清理。
  • SIGHUP - SIGHUP 信号断开进程与父进程的连接。这也可用于重新启动进程。例如,“killall -SIGUP compiz”将重新启动 Compiz。这对于存在内存泄漏的守护进程很有用。
  • SIGINT - 此信号与按 ctrl-c 相同。在某些系统上,“删除”+“中断”向进程发送相同的信号。该过程被中断并停止。然而,进程可以忽略这个信号。
  • SIGQUIT - 这类似于 SIGINT,能够使进程产生核心转储。

0
投票

您必须使用kill语句发送SIGKILL标志。

kill -9 [pid]
如果不这样做,操作系统将选择在方便时终止该进程,SIGKILL (-9) 将告诉操作系统立即终止该进程,而不会忽略该命令,直到稍后。


0
投票

试试这个 杀-9 它将杀死任何带有括号中给出的 PID 的进程


0
投票

尝试“kill -9 $proid”或“kill -SIGKILL $proid”命令。如果您想了解更多信息,请点击


0
投票

根据您所拥有的内容,您似乎没有在

proid
变量中获得实际的 PID。如果您想捕获
pidof
的输出,则需要将该命令括在反引号中,以实现旧形式的 命令替换 ...

proid=`pidof $proceso`

...或者像新形式的命令替换一样。

proid=$(pidof $proceso)

0
投票

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

cat startmotion.sh

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

第二个; 猫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
投票

在 Mac 上:

如果端口是 8080 例如:

运行:

lsof -i :8080

你会得到这个:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    12345 user   12u  IPv6 0t0    TCP *:http-alt (LISTEN)

运行:

kill -9 12345

© www.soinside.com 2019 - 2024. All rights reserved.