BashはCのfork()に似た分岐をサポートしていますか?

BashはCのfork()に似た分岐をサポートしていますか?

同じスクリプトの2つのコピーが実行されるように、特定の時点で分岐したいスクリプトがあります。

たとえば、次のbashスクリプトが存在すると予想します。

echo $$
do_fork()
echo $$

このbashスクリプトが存在する場合、予想される出力は次のとおりです。

<ProcessA PID>
<ProcessB PID>
<ProcessA PID>

または

<ProcessA PID>
<ProcessA PID>
<ProcessB PID>

この種の出力を取得したり、bashスクリプトにCと同様のフォークを実行させるために "do_fork()"の代わりに使用できるものはありますか?

ベストアンサー1

はい。フォークのスペルは次のとおりです&

echo child & echo parent

混乱する可能性があるのは、これが$$シェルプロセスのPIDではなく、オリジナルシェルプロセス要点は、これが$$シェルスクリプトの特定のインスタンスの一意の識別子であることです。これはスクリプトの実行中に変更されず、$$同時に実行される他のスクリプトとは区別されます。シェルプロセスの実際のPIDを取得する1つの方法はsh -c 'echo $PPID'

シェルの制御フローはCとは異なります。 Cで書くなら

first(); fork(); second(); third();

その後、シェルに対応するものは次のとおりです。

after_fork () { second; third; }
first; after_fork & after_fork

単純なシェル型はfirst; child & parent一般的なCイディオムに対応します。

first(); if (fork()) parent(); else child();

&$$すべてのBourneスタイルのシェルと(t)cshにこのように存在して動作します。$PPIDもともとBourneシェルにはありませんが、POSIX(したがってash、bash、ksh、zshなど)にはあります。

おすすめ記事