私はシェルスクリプトを初めて使用しますが、他の入力ファイルセットに対してループで実行したいバイナリがいくつかあります。順番に実行する必要があります。現在の実行が完了したら繰り返します。
別の端末で両方のプロセスを実行してpidを保存しようとしましたが、プロセスを終了しようとするとpidが変更されたようです。
#!/bin/bash
gnome-terminal -e "vi" & MAIN_PID=$!
gnome-terminal -e "gedit" & SIM_PID=$!
echo "MAIN Process ID is " $MAIN_PID
echo "SIM Process ID is " $SIM_PID
sudo kill $MAIN_PID
ターミナル出力:
デフォルトのプロセスIDは8532です。 SIMプロセスIDは8542です。 # '-e'オプションは廃止され、将来のバージョンのgnome-terminalから削除される可能性があります。 #オプションを終了するには、「--」を使用し、その後に実行するコマンドラインを配置します。 Kill:(8532):そのプロセスはありません。 ユーザー:~/デスクトップ$ ps-A | 第1026話 00:00:01 dconf-サーバー肉CE 8541ポイント/3 00:00:00肉 ユーザー:~/デスクトップ$ ps-A | 8550分/4 00:00:00編集者
私が欲しいものを始めるより簡単な方法があれば、私も知りたいです。これらのプロセスを開始し、いくつかの条件を確認していつ完了するかを確認し、プロセスを終了してから別の入力セットに繰り返す予定です。
ベストアンサー1
実行すると、gnome-terminal -e "vi" & MAIN_PID=$!
インスタンスのPIDはキャプチャされません。所有プロセスのPIDを見つけるには、出力でいくつかの魔法を使用できます。vi
MAIN_PID
gnome-terminal
gnome_terminal
pstree
pstree -p $MAIN_PID | grep -o 'vim([0-9]*) | grep -o '[0-9]*'
kill -0
プロセスがまだ存在することを確認するには、シグナルを送信せず、プロセスが存在する場合は終了コード0を返し、存在しない場合は終了コード1を返すことを使用できます。