現在実行中のタスク/プロセスがあります。最初のタスクが完了したら、別のタスクを開始するようにスケジュールしたいと思います。
Linuxでそれを行うにはどうすればよいですか?
(最初のタスクを停止して、次から次へとタスクを開始するスクリプトを作成することはできません)
やや貧弱なスペックですが、
watch -n 1 'pgrep task1 || task2'
仕事をするかもしれません。
待ちたい。
マニュアルのセクション2にあるシステムコール、そのようなバリエーションの1つ、waitpid
またはこの目的のために明示的に設計されたシェルビルトインのいずれかです。
両方のプロセスが販売の子孫であるため、シェルビルトインはもう少し自然です。したがって、次のようなスクリプトを記述します。
#!/bin/sh
command1 arguments &
wait
command2 args
システムコールを使用するには、フォークするプログラムを作成し、子で最初のコマンドを起動してからwait
、2番目のプログラムを実行する必要があります。
のマンページは次のようにwait (2)
述べています。
wait()およびwaitpid()
wait()システムコールは、子の1つが終了するまで、現在のプロセスの実行を一時停止します。呼び出しwait(&status)は、次と同等です。waitpid(-1, &status, 0);
waitpid()システムコールは、pid引数で指定された子が状態を変更するまで、現在のプロセスの実行を一時停止します。