
Javaプログラムを起動しましたが、Unix端末で無限ループが発生しました(端末ウィンドウを想定しています)。TW1)2番目の端末ウィンドウを開きました(例:TW2)ps -ef | grep java
コマンドを実行すると、次の結果が表示されます。
501 32566 32444 0 2:26PM ttys000 7:43.89 /usr/bin/java com.test.Hello
501 32784 31676 0 2:34PM ttys003 0:00.00 grep java
1) 識別のttys000
有無TW1そしてttys003
決定するTW2?
2)最初の行は実行中のJavaプロセスを示します。に関連付けられていますttys000
。だから基本的にTW1私のJavaプロセスの制御端末です。そうなんですか?
3) コマンドを実行すると、ps -ef
列に複数のプロセスが表示されます。これは、プロセスに関連するオープンターミナルがないことを意味しますか???
tty
答え1
1.)
はい、もっと内容がありますが。 ttys000
はにある文字デバイスでもあります/dev
。書き込みtty
グループ権限を持つユーザー(ほとんどのユーザーがそうです)は、文字をデバイスにパイプでき、その端末に表示されます。 ttys*
実際のテレタイパーではありませんが、tty
適切な名前の端末エミュレーターでエミュレートされます。
私はMacを持っていないので、次の例ではLinux命名規則を使用します。
ユーザーAで端末Aを開き、エミュレートされたttyを見つけます。
[userA@terminalA]$ tty
/dev/pts/0
ユーザー B で端末 B を開き、同じことを行います。
[userB@terminalB]$ tty
/dev/pts/3
これで、端末Aから端末Bにいくつかの文字をリダイレクトします。
[userA@terminalA]$ echo Hi there > /dev/pts/3
端末Bに表示されることを確認してください。
[userB@terminalB]$ Hi there
私はMacでこれらのデバイスが/dev/ttys*
。
2.)
多少。それttys000
自体は単なる文字デバイスであり、Javaプロセスを制御する実際のエンティティは端末エミュレータです。渡すコントロール私の言葉は、それがJavaプロセスの親プロセスであることを意味します。親プロセスは、他のプロセスよりも子プロセスとのやり取りが容易になります。
また、特定の予防措置を講じない場合(man nohup
その予防措置の例を参照)、親プロセスが終了すると、すべての子プロセスも終了します。
三)
これカールソンの答えすでに説明したように、これは?
端末に依存しないプロセスを意味します。
端末自体は単純なキャラクターデバイスなので、プロセスが端末デバイスに関連付けられる必要はないと結論づけるのは難しくないと思います。
結論
実際の端末は、/dev/tty
最新の*nixオペレーティングシステムではほとんど使用されません(起動プロセス中に広く使用されていますが)。しかし、これが実際の端末を使用できないという意味ではありません。 Linuxコンピュータで(申し訳ありませんが、Macで何をするのかわかりません)++ Ctrl(および、、...まで)を組み合わせると、次のような結果が得られます。AltF1F2F3F7本物端末。これらの実際の端末の1つは、グラフィック表示を実行するために使用される。
グラフィカルアプリケーションを含む最新の*nixオペレーティングシステムのいくつかのプロセスは、それを実行するスクリプトが追加の引数を渡す必要があるため、端末デバイスに関連付けられています。このスクリプトはシェルをトリガーし、追加のパラメータを渡し、プロセスを開始します。これらのスクリプトはしばしば混乱を引き起こします。