如何通过 linux 中的 pid 终止进程
How to kill a process by its pid in linux
我是 linux 的新手,我正在构建一个接收进程名称、获取其 PID(我对这部分没有问题)然后将 PID 传递给 kill 的程序命令,但它不工作。它是这样的:
read -p "Process to kill: " proceso
proid= pidof $proceso
echo "$proid"
kill $proid
有人能告诉我为什么它没有杀死它吗?我知道还有一些其他方法可以做到这一点,即使使用 PID,但其中 none 似乎对我有用。我相信这是 Bash 语言(我刚开始学习)的某种问题。
您必须在 kill 语句中发送 SIGKILL 标志。
kill -9 [pid]
如果您不这样做,操作系统将选择 ose 在方便时终止进程,SIGKILL (-9) 将告诉 os 立即终止进程,直到稍后才忽略该命令。
而不是这个:
proid= pidof $proceso
你可能是这个意思:
proid=$(pidof $proceso)
即便如此,
该程序可能不会被杀死。
默认情况下,kill PID
向指定进程发送TERM
信号,
让它有机会有序地关闭,
例如清理它正在使用的资源。
使用 kill -KILL PID
或 kill -9 PID
.
发送进程以在没有优雅清理的情况下终止的最强信号是 KILL
I believe it's some kind of problem with the bash language (which I just started learning).
您发布的原始行 proid= pidof $proceso
应该会引发错误,
Bash 会打印一条关于它的错误信息。
调试问题首先要阅读和理解软件试图告诉您的错误消息。
试试这个
杀死-9
它会杀死括号中给出的 PID 的任何进程
尝试 "kill -9 $proid" 或 "kill -SIGKILL $proid" 命令。如果您想了解更多信息,click.
kill 希望您告诉它**如何杀死*,因此必须有 64 种不同的方法来杀死您的进程:) 它们有名称和编号。杀伤力最大的是-9
。一些有趣的包括:
- SIGKILL - SIGKILL(也称为
-9
)信号强制进程立即停止执行。程序不能忽略这个信号。此过程也不会进行清理。
- SIGHUP - SIGHUP 信号断开进程与父进程的连接。这也可用于重新启动进程。例如,"killall -SIGUP compiz" 将重新启动 Compiz。这对于内存泄漏的守护进程很有用。
- SIGINT - 此信号与按 ctrl-c 相同。在某些系统上,"delete" + "break" 向进程发送相同的信号。该过程被中断并停止。但是,进程可以忽略这个信号。
- SIGQUIT - 这类似于 SIGINT,能够使进程产生核心转储。
根据您所拥有的,您似乎没有在 proid
变量中获得实际的 PID。如果您想捕获 pidof
的输出,您需要将该命令包含在旧形式 command substitution ...
的反引号中
proid=`pidof $proceso`
...或者类似的新形式的命令替换。
proid=$(pidof $proceso)
我也遇到了类似的问题,只想运行每天监控(视频监控)几个小时。
写了两个sh脚本;
猫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
非常简单,但这就是我所需要的。
使用以下命令显示进程的端口和PID:
sudo netstat -plten
然后
kill -9 PID
这是一个终止进程 运行 在端口 8283 上并且 PID=25334
的例子
我是 linux 的新手,我正在构建一个接收进程名称、获取其 PID(我对这部分没有问题)然后将 PID 传递给 kill 的程序命令,但它不工作。它是这样的:
read -p "Process to kill: " proceso
proid= pidof $proceso
echo "$proid"
kill $proid
有人能告诉我为什么它没有杀死它吗?我知道还有一些其他方法可以做到这一点,即使使用 PID,但其中 none 似乎对我有用。我相信这是 Bash 语言(我刚开始学习)的某种问题。
您必须在 kill 语句中发送 SIGKILL 标志。
kill -9 [pid]
如果您不这样做,操作系统将选择 ose 在方便时终止进程,SIGKILL (-9) 将告诉 os 立即终止进程,直到稍后才忽略该命令。
而不是这个:
proid= pidof $proceso
你可能是这个意思:
proid=$(pidof $proceso)
即便如此,
该程序可能不会被杀死。
默认情况下,kill PID
向指定进程发送TERM
信号,
让它有机会有序地关闭,
例如清理它正在使用的资源。
使用 kill -KILL PID
或 kill -9 PID
.
KILL
I believe it's some kind of problem with the bash language (which I just started learning).
您发布的原始行 proid= pidof $proceso
应该会引发错误,
Bash 会打印一条关于它的错误信息。
调试问题首先要阅读和理解软件试图告诉您的错误消息。
试试这个 杀死-9 它会杀死括号中给出的 PID 的任何进程
尝试 "kill -9 $proid" 或 "kill -SIGKILL $proid" 命令。如果您想了解更多信息,click.
kill 希望您告诉它**如何杀死*,因此必须有 64 种不同的方法来杀死您的进程:) 它们有名称和编号。杀伤力最大的是-9
。一些有趣的包括:
- SIGKILL - SIGKILL(也称为
-9
)信号强制进程立即停止执行。程序不能忽略这个信号。此过程也不会进行清理。 - SIGHUP - SIGHUP 信号断开进程与父进程的连接。这也可用于重新启动进程。例如,"killall -SIGUP compiz" 将重新启动 Compiz。这对于内存泄漏的守护进程很有用。
- SIGINT - 此信号与按 ctrl-c 相同。在某些系统上,"delete" + "break" 向进程发送相同的信号。该过程被中断并停止。但是,进程可以忽略这个信号。
- SIGQUIT - 这类似于 SIGINT,能够使进程产生核心转储。
根据您所拥有的,您似乎没有在 proid
变量中获得实际的 PID。如果您想捕获 pidof
的输出,您需要将该命令包含在旧形式 command substitution ...
proid=`pidof $proceso`
...或者类似的新形式的命令替换。
proid=$(pidof $proceso)
我也遇到了类似的问题,只想运行每天监控(视频监控)几个小时。 写了两个sh脚本;
猫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
非常简单,但这就是我所需要的。
使用以下命令显示进程的端口和PID:
sudo netstat -plten
然后
kill -9 PID
这是一个终止进程 运行 在端口 8283 上并且 PID=25334
的例子