9

bash:( &)( ) &.

私が気付いた唯一の違いは、現在の tty 名を返すの(tty &)に対し、「not a tty」を(tty) &返すことですが、なぜですか?

例を挙げると、またはを実行する必要があります(setsid startx &)(setsid startx) &?

4

1 に答える 1

6

の場合

(tty &)

ジョブ制御と端末なしでバックグラウンドで別のプロセスを開始するサブシェルが開始されるttyため、「not a tty」エラーが発生します。ttyプロセスは PPID 1 で切り離されます

の場合

(tty) &

サブシェルが開始され、バックグラウンドで実行されます。このバックグラウンド シェルはttyプロセスを開始し、tty が終了して端末に報告した後、サブシェルはバックグラウンドで終了します。

--

tty簡単なコマンドです。startx特定のコマンド ( など) が( ... &)親プロセスから切り離されたり所有権を剥奪されたりするために構造が必要かどうかは、コマンド自体によって異なります。プロセスがサブプロセスを開始してそれをデタッチする方法はいくつかあるため、コマンドでは必要ない場合があります。

于 2014-03-16T16:36:58.293 に答える