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

linux中如何通过进程的pid杀死进程,linux,bash,process,command,kill,Linux,Bash,Process,Command,Kill,我是linux新手,我正在构建一个程序,该程序接收进程的名称,获取其PID(我对该部分没有问题),然后将PID传递给kill命令,但它不起作用。事情是这样的: read -p "Process to kill: " proceso proid= pidof $proceso echo "$proid" kill $proid 有人能告诉我为什么它没有杀死它吗?我知道还有其他一些方法可以做到这一点,即使是PID,但它们似乎都不适合我。我相信这是Bash语言(我刚开始学习)的某种问题。您必须在ki

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

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

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

您必须在kill语句中发送SIGKILL标志。
kill-9[pid]

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

必须将SIGKILL标志与kill语句一起发送。
kill-9[pid]
如果您不这样做,操作系统将选择在方便时终止进程,SIGKILL(-9)将告诉操作系统立即终止进程,而不忽略该命令,直到稍后

而不是这个:

你可能是这个意思:

proid=$(pidof $proceso)
即便如此, 该程序可能不会被终止。 默认情况下,
kill PID
向指定的进程发送
TERM
信号, 给它一个有序关闭的机会, 例如,清理它正在使用的资源。 使用
kill-kill-PID
kill-9pid
发送进程终止而不进行优雅清理的最强信号是
kill


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

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

而不是:

你可能是这个意思:

proid=$(pidof $proceso)
即便如此, 该程序可能不会被终止。 默认情况下,
kill PID
向指定的进程发送
TERM
信号, 给它一个有序关闭的机会, 例如,清理它正在使用的资源。 使用
kill-kill-PID
kill-9pid
发送进程终止而不进行优雅清理的最强信号是
kill


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

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

试试这个 杀死-9 它将使用括号中给出的PID终止任何进程 杀死-9
它将使用括号中给出的PID终止任何进程

尝试使用“kill-9$proid”或“kill-SIGKILL$proid”命令。如果您想了解更多信息,请尝试使用“kill-9$proid”或“kill-SIGKILL$proid”命令。如果您需要更多信息,.

kill希望您告诉它**如何终止*,因此必须有64种不同的方法终止您的进程:)它们有名称和编号。最致命的是
-9
。一些有趣的例子包括:

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

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

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

根据您所拥有的,您似乎没有在
proid
变量中获得实际的PID。如果您想捕获
pidof
的输出,您需要将该命令包含在backtics中,用于旧形式的

。。。或者类似于命令替换的新形式

proid=$(pidof $proceso)

根据您所拥有的,您似乎没有在
proid
变量中获得实际的PID。如果您想捕获
pidof
的输出,您需要将该命令包含在backtics中,用于旧形式的

。。。或者类似于命令替换的新形式

proid=$(pidof $proceso)

我也有类似的问题,只想每天运行几个小时的监视器(视频监控)。 写了两个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

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

我有一个类似的问题,只想运行监视器(视频监视)
sudo netstat -plten 
kill -9 PID