Bash

如何使用遠端linux獲取在bash腳本中執行的程序的PID

  • March 22, 2022

我在通過 ssh 訪問 linux 機器以執行模擬的 Mac 電腦上。我目前正在並行執行多個命令(我用 & 將它們放在後台),當它們完成時,我提取感興趣的文件,然後刪除所有命令輸出並重做。

我想知道是否可以使用 PID 檢查這些任務是否已完成,以便自動提取所需文件並再次啟動完全相同的命令。我在這裡發布一條消息,以了解獲取通過 ssh -c 執行的命令的 PID,這不是我做的(因為我在遠端 linux 中)。

為了獲取 PID,我嘗試了how-to-get-pid-of-just-started-process中顯示的解決方案,但都沒有 $! ssh -c 也沒有 jobs -p 給我正確的 PID。我想知道它是否不起作用,因為我正在遠端訪問(出現在 htop 中的命令是 ssh -c …),或者我只是做得不好。

這是我的第一個 bash 腳本:

#!/bin/bash

./createFiles.sh $1 # create the needed $1 folders

for i in $(seq 1 $1)
do
   cd $i
   myCommand &
   cd ..
done

當這個完成後,我使用:

#!/bin/bash

for i in $(seq 1 $1)
do
   cd $i
   cp output/file.txt ../file_$2_$i.txt # $2 is the number of the run
   cd ..
done

./deleteFiles.sh $2 # delete the needed $1 folders to start anew

然後我循環 5 次這兩個。而且我想知道是否可以自動循環 5 次而不讓我站在電腦前。

如果你們中的任何人有任何想法,那就太好了:)

PS:我希望很清楚,英語不是我的母語 hihi

您正在建構 GNU Parallel :)

–transfer –return –cleanup 正在做你想做的事。

閱讀第 8 章:https ://zenodo.org/record/1146014

感謝@mashuptwice 的回答,我設法做到了(即:您可以使用$$從腳本內部獲取 PID。您還可以使用pgrep從腳本外部查找給定程序名稱的 PID。– mashuptwice 3 月 18 日 14 點: 07)

然後使用 bash while,我到達了我想要的地方:D-s``sleep

為了透明起見:

#!/bin/bash

for j in $(seq 1 $2)
do
   ./createFiles.sh $1 # create the needed $1 folders

   for i in $(seq 1 $1)
   do
       cd $i
       myCommand &
       cd ..
   done

   sleep 5 # Wait to be sure that the commands were started

   pgrep -u myUser myCommand > PIDs.txt

   while [ -s PIDs.txt ]
   do
       echo not finished yet
       pgrep -u myUser myCommand > PIDs.txt
       sleep 10
   done
   cat PIDs.txt # Debug print

   ./mvFiles.sh $1 $j # extract the needed files and remove the now useless outputs
   rm PIDs.txt
done

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