在没有人为干扰的情况下在终端运行/停止命令?

在没有人为干扰的情况下在终端运行/停止命令?

作为一名 Linux 初学者,我面临着一个小问题。我在终端中有 1 个命令,如图所示: 在此输入图像描述

当我运行这个命令时,它会生成一些行,但问题是我需要让这个命令在 5 秒后停止,而无需ctrl + c人为按下:

ctrl + c 停止命令

我需要使用什么方法来通过计算机完成此操作,而无需实际按下,ctrl + c因为我需要重复此过程 1000 多次。

  • 运行命令
  • 停止命令
    • (暂停xx秒)
  • 运行命令
  • 停止命令
    • (暂停xx秒)
  • ETC。

我需要安装一些特殊程序还是可以使用 bash 脚本来完成?

答案1

您可以在后台运行该命令,然后在前台休眠 5 秒,然后杀死后台命令。

  • 在后台运行命令:

    command &
    
  • 将命令 PID 保存在变量中:

    command_pid=$!
    
  • 睡眠 5 秒:

    sleep 5
    
  • 杀死后台进程:

    kill "$command_pid"
    

现在你可以添加一个暂停并将整个循环等等。

环形:

for ((i=0; i<1000; i++)); do
    crunch 7 7 abcdefghijklm &
    command_pid=$!
    sleep 5
    kill "$command_pid"
    sleep 5 #pause
done

答案2

假设timeout(1)可用,shell命令

timeout 5s whateverthatcommandis; sleep 99

应该在五秒后终止程序(假设程序表现良好......),然后sleep无论你的 xx 秒是多少。然后可以根据需要将这些命令包装在某种循环中;假设seq可用(在 BSD 上可能会使用jot),典型的循环可能会按照以下方式运行:

for n in `seq 1 1000`; do timeout 5s whateverthatcommandis; sleep 99; done

顺便说一句,shell 循环在 ZSH 下可能会变得更清晰:

repeat 1000 { timeout 5s whateverthatcommandis; sleep 99 }

相关内容