7

我在 Linux 上工作,我在 Linux 终端上执行了 for 循环,如下所示:

for i in `cat fileName.txt`
do
echo $i
vim $i
done

fileName.txt 是一个文件,其中包含我在 vim 编辑器中一一打开的大量文件条目。现在我必须跳过在两者之间打开其他文件。(即我必须打破 for 循环)。任何建议如何获得运行循环的PID?并杀死同样的。提前致谢。

4

4 回答 4

13

You want to kill the running job. Press CtrlZ. Bash will show something like:

[1]+  Stopped                 vim $i

Use that number with kill to send the KILL signal:

kill -9 %1

and it should be killed afterwards:

[1]+  Killed                  vim $i
于 2012-05-07T14:21:31.650 回答
2

这也可以解决问题:

while true ; do killall vim ; done

你可以像往常一样用 ^C 中止这个。

于 2012-05-07T09:20:36.013 回答
1

找到vim进程的父进程的进程id(PID),应该是执行for循环的shell。尝试使用“pstree -p”。然后,使用“kill”杀死该进程ID。

于 2012-05-07T14:27:29.950 回答
0

要终止 vim 进程的创建,您必须停止 for 循环。此循环由 bash 进程管理。所以找到进程的PID并杀死它。为此,请找到 vim 进程的 PPID,即其父进程的 PID,然后终止父进程: ps -elf | tr -s ' ' | grep vim | cut -f5 -d ' ' | xargs kill

您可以将此命令与第二个命令一起使用,这将杀死所有 vim 进程,以确保没有 vim 实例保留: ps -elf | tr -s ' ' | grep vim | cut -f4 -d ' ' | xargs kill

我看到您遇到了“不允许的权限”的问题。这可能是由于缺少权限造成的,因此为了确保它会终止进程,您可以使用 sudo 调用 xargs kill :ps -elf | tr -s ' ' | grep vim | cut -f5 -d ' ' | sudo xargs kill

于 2016-11-29T16:48:04.120 回答