Linux

在沒有人為乾擾的情況下在終端中執行/停止命令?

  • March 26, 2017

作為初學者的 Linux 使用者,我面臨著一個小問題。我在終端中有 1 個命令,如圖所示: 在此處輸入圖像描述

當我執行此命令時,它會生成一些行,但問題是我需要在 5 秒後停止此命令,而無需ctrl + c人工按下:

ctrl + c 停止命令

我需要使用什麼方法通過電腦完成此操作而無需實際按下ctrl + c,因為我需要重複此過程超過 1000 次。

  • 執行命令

  • 停止命令

    • (暫停 xx 秒)
  • 執行命令

  • 停止命令

    • (暫停 xx 秒)
  • 等等

我需要安裝一些特殊程序還是可以使用 bash 腳本來完成?

您可以在後台執行命令,然後在前台休眠 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

假設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

順便說一下,在 ZSH 下,shell 循環可能會更清晰:

repeat 1000 { timeout 5s whateverthatcommandis; sleep 99 }

引用自:https://unix.stackexchange.com/questions/353944