Subject: How can a process detect if it's running in the background? Date: Thu Mar 18 17:16:55 EST 1993
Bsh: if [ -t 0 ]; then ... fi
Csh: if(isatty(0)) { ... }
一般に、バックグラウンドにいるのかどうかいうことはできません。シェルが
違ったり、UNIX のバージョンが違うと、「フォアグランド」「バックグラウン
ド」が意味する概念が違うことが根本的な問題となります。これらが意味する
概念がよりよく定義された最も一般的なシステムでは、プログラムはフォアグ
ランド、バックグラウンド間を任意に行き来できます。ジョブコントロール機能のない UNIX システムは普通、SIGINT と SIGQUIT を 無視し標準入力を /dev/null にリダイレクトすることによってプロセスをバッ クグラウンドにおきます。これはシェルによって行なわれます。
ジョブコントロールをサポートしている UNIX システム上では、シェルはター ミナルが属しているプロセスグループと違うプロセスグループIDを付与するこ とによってプロセスをバックグラウンドにおきます。ジョブコントロールをサ ポートしている UNIX システム上で、ジョブコントロールをサポート "しない" シェルは、通常ジョブコントロールをサポートしないシステムの上でシェルが 行なうのと同じことをしています。