タスクがスクリプトのコマンドをリストしないのはなぜですか?

タスクがスクリプトのコマンドをリストしないのはなぜですか?

バックグラウンドでいくつかのプログラムを実行するスクリプトがありますが、実行後に「jobs」コマンドとしてリストされません。なぜこれですか?

(./m_prog -t m_prog1 m_config) &
(./m_prog  -t m_prog2  m_config) &
(./m_prog  -t m_prog3  m_config) &

しかし、端末でそれぞれを実行すると、「タスク」に表示されます。

スクリプト内で実行されるコマンドで同じ効果を得るにはどうすればよいですか?

ベストアンサー1

ジョブは、ジョブを作成したシェルのインスタンス化にのみ適用されます。 jobs npidの代わりに数字を使用してください。シェルがスクリプト(別の新しいプロセス)内で実行されると、スクリプトを開始した古いシェル、タスク(以前のシェルで実行されている)は、新しいシェルでタスク#1を参照できなくなります。

なぜ?現在のシェルは独自のタスク#1を持つことができるからです。 UNIX / Linuxはいわゆるプロセスグループまたはセッションを維持します。セッションのリーダーは、ttyを所有し、キーボードを介してttyと対話するプロセスです。マニュアルで setid() 関数の説明を見つけてください。ジョブコマンドは、プロセスが開始され、以前の親シェル(リーダー)から子プロセスとして実行され続ける場合に機能します。それ以外の場合は動作しません。

おすすめ記事