リモートLinux bashスクリプトで実行されているプログラムのPIDを取得する方法

リモートLinux bashスクリプトで実行されているプログラムのPIDを取得する方法

SSHを介してMacコンピュータからLinuxコンピュータにシミュレーションを実行しました。現在、複数のコマンドを並列に実行しており(バックグラウンドに配置)、操作が完了したら、関心のあるファイルを抽出してから、すべてのコマンド出力を削除して再実行します。

必要なファイルを自動的に抽出し、同じコマンドを再実行できるように、PIDを使用してこれらの操作が完了したことを確認できるかどうか疑問に思います。 ssh -cを介して実行されるコマンドのPIDを取得する方法を学ぶために、ここにメッセージを投稿します。これは私がしたことではありません(リモートLinuxにあるため)。

私はで示された解決策を試しました。起動したばかりのプロセスのPIDを取得する方法PIDを取得するには$! 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

その後、これら2つのループを5回繰り返しました。コンピュータの前に立たなくても自動的に5回繰り返すことができるのか気になりました。

誰もが良いアイデアを持っている場合:)

PS:確かに申し上げますが、英語は私の母国語ではありません。こんにちは

答え1

GNU Parallelを構築しています:)

--transfer --return --cleanup が目的のタスクを実行しています。

第8章を読んでください。https://zenodo.org/record/1146014

答え2

@mashuptwiceの答えのおかげで、これを行うことができました(たとえば、を使用して$$スクリプト内からPIDを取得できますpgrep)。

その後、bashを使用して目的の位置を取得しましたwhile。 :D-ssleep

透明性のため:

#!/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

関連情報