すでに実行中の他のジョブの後に実行するようにbashでジョブをスケジュールする方法は? [繰り返し]

すでに実行中の他のジョブの後に実行するようにbashでジョブをスケジュールする方法は? [繰り返し]

似たようなものを探していますcommand1 ; command2。つまり、command2後で実行する方法がありますが、すでに実行しているときに実行するようにcommand1スケジュールしたいと思います。command2command1

command2command1標準入力を使用せず、出力にcommand1入力が実用的ではないほど多くのテキストを生成しないと仮定すると(入力した文字が出力と混在するcommand1)、単に入力してEnterを押すとこの問題が解決されます。

答え1

一般的に私がすることは次のとおりです。Ctrl+Z fg && command2

  1. Ctrl+Z一時停止し、シェルに詳細を入力できます。
  2. (オプションbg)command2を入力しながら、バックグラウンドでcommand1を再起動します。
  3. fg && command2command1 が成功すると、command1 がフォアグラウンドで復元され、command2 がその後キューに追加されます。もちろん、必要に応じてまたは;に置き換えることができます||&&

答え2

  1. コマンドを開始する

    command1
    
  2. Ctrl実行を一時停止するには+を押します。Z

  3. 一時停止コマンドを実行して、対応するジョブ番号を見つけます。 (通常、一時停止コマンドをコンソールに表示すると、すでにコンソールに印刷されています。)

    jobs
    
  4. command1バックグラウンドで続けましょう

    bg
    
  5. 計画の実行がcommand2完了するのを待っています。command1

    wait -n <command1 job number> ; command2
    

文書ジョブ制御内蔵

答え3

いくつかのオプションがあります。

  • アンパサンド付き、「バックグラウンドにプッシュされる」、第2のプログラムは、第1のプログラムの開始後に開始されるが、互いに並列に実行することができる。

    command1 & command2
    
  • アンパサンドを2つ含む、「論理AND」、第2のプログラムは、第1のプログラムが正常に完了した後にのみ開始される。

    command1 && command2
    
  • セミコロンでコマンドラインからコマンドを切り離して最初のプログラムが完了すると、失敗したり中断されても、2番目のプログラムが起動します。

    command1 ; command2
    
  • あなたはそれを使用することができますwait <PID>同じシェル(同じ端末ウィンドウ)ですでに実行されている場合は、最初のコマンドが完了するのを待ちます。

  • それ以外の場合、最初のコマンドがすでに別のシェル(別のウィンドウ)で実行されている場合は、小さなコマンドを使用できます。whileループはpsを使用してPIDがまだ見つかっているかどうかを確認します。ps。見つからない場合は、2 番目のコマンドが実行されます。

    bashこのデモ例は、PIDを介して実行されていることを確認し、topコマンドを実行するために使用されます。

    echo "*** $USER, I am ready now ***"
    

    実行されなくなった場合top

    pid=$(ps -A|grep top|cut -d ' ' -f 1); \
    while [ "$pid" != "" ]; do ps -A|grep "$pid" > /dev/null; \
    if [ $? -eq 0 ]; then sleep 5;else pid=""; fi; done; \
    echo "*** $USER, I am ready now ***"
    

答え4

2 つの端末を使用できるオプションがある場合は、次のことができます。

  • 端末でcommand1を実行したとします(terminal1と呼びます)。
  • 新しい端末を起動します(terminal2と呼びます)。
  • command1のプロセスIDを見つけます(command1_pidといいます)。ターミナル2でコマンドを実行します。ps -ef | grep <command1>誤ってサブストリングを持つ他のプロセスを見つけないように、grepコマンドでフィルター文字列を正しく構成できます。
  • コマンドの実行wait <command1_pid> ; command2

デフォルトでは、提供されたwaitPIDが終了するのを待ってから返されるbash組み込み機能です。 command1が完了するのを待つタスクをbashwaitコマンドに委任するだけです。

関連情報