複数の端末でバイナリを実行するシェルスクリプト

複数の端末でバイナリを実行するシェルスクリプト

私はシェルスクリプトを初めて使用しますが、他の入力ファイルセットに対してループで実行したいバイナリがいくつかあります。順番に実行する必要があります。現在の実行が完了したら繰り返します。

別の端末で両方のプロセスを実行して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を見つけるには、出力でいくつかの魔法を使用できます。viMAIN_PIDgnome-terminalgnome_terminalpstree

pstree -p $MAIN_PID | grep -o 'vim([0-9]*) | grep -o '[0-9]*'

kill -0プロセスがまだ存在することを確認するには、シグナルを送信せず、プロセスが存在する場合は終了コード0を返し、存在しない場合は終了コード1を返すことを使用できます。

おすすめ記事