【问题标题】:How to kill a running for loop on linux?如何杀死Linux上正在运行的for循环?
【发布时间】:2012-05-07 09:12:31
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您使用 PID 并杀死它,那么您的整个脚本将结束,而不仅仅是您的循环。 ps -A | grep YOUR_SCRIPT_NAME 应该提供您的进程及其 ID
  • 你想杀死你打开的文件。说 fileName.txt 有像 1.txt 2.txt 3.txt 这样的条目,那么一旦你打开 1.txt ,你想杀死那个进程吗?对吗?
  • @Pavan 谢谢,但我正在终端本身上执行 for 循环,而不是在任何脚本中。
  • @m4n07 我需要打破正在运行的“for”循环。它不应打开 fileName.txt 中存在的列表中的其他文件。

标签: linux pid


【解决方案1】:

您想终止正在运行的作业。按 CtrlZ。 Bash 将显示如下内容:

[1]+  Stopped                 vim $i

将该号码与kill 一起使用以发送KILL 信号:

kill -9 %1

然后它应该被杀死:

[1]+  Killed                  vim $i

【讨论】:

  • 这是我发现在终端而不是脚本中杀死 shell 循环的唯一方法。谢谢,我在别处找不到 %n 语法。
【解决方案2】:

这也可以解决问题:

while true ; do killall vim ; done

您可以像往常一样使用 ^C 中止此操作。

【讨论】:

  • 您是否在与生成所有 vim 的循环相同的用户下运行它?此外,其他人可能同时在同一台机器上运行 vim,在这种情况下您可以忽略该错误。 killall 仍然会尽其所能杀死。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    要终止 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

    【讨论】:

      猜你喜欢
      • 2022-08-11
      • 1970-01-01
      • 2017-08-25
      • 2018-12-10
      • 2018-10-28
      • 2012-03-21
      • 2019-12-14
      • 2019-03-21
      相关资源
      最近更新 更多