
telnetなどでログインして
プロセスを動作させて、ログアウトすると
動作させていたプロセスが消えるのですが、
誰がそのプロセスにシグナルを送っているのでしょうか?
OSはsolarisを使っています。
シェルが子供を消しているのかと思ったのですが、
以下の動作をみるとそうでないみたいで・・
telnet ....
$
$sh
$sleep 10000 &
1234(←sleepのPID)
$kill [shのPID]
$ ps -eo pid,ppid,args | grep 1234
1234 1 sleep 1000
$exit
telnet ....
$
$ ps -eo pid,ppid,args | grep 1234
$ない
No.5ベストアンサー
- 回答日時:
> SIGHUPする対象のプロセスはloginと同じPGIDなのでしょうか?
SIGHUPは、loginから起動されたshが死んだときに、shと同じPGIDを持つプロセスに送られます。login以外から起動されたshが死んだときは、死にぎわのshが出さないかぎりSIGHUPは出ません。
但し、これは大雑把な説明です。特にジョブ制御が絡む場合など、微妙な点は簡単に説明することが出来ません。OSのリリースによって違います。
下のURLは少し古くなりますがSIGHUPについて少し詳し解説があります。
なお、子が親の死を知りたいのならPPIDを調べるのが素直な方法だと思います。親に新しいプロセスグループやセッションを作らせたりしても、多分、SIGHUPを使うのは無理です。
参考URL:http://www.iem.pw.edu.pl/Archiwum/bsdi-users/018 …
No.3
- 回答日時:
誰がシグナルを出しているのか、答えは、ログインシェルが死んだとき、擬似端末ドライバ(カーネル)がSIGHUPを出しています。
ログインシェルの道連れになりたくなければnohupを使うか、自分でコードを書く場合はSIGHUPを無視するとか制御端末を切り離すとかすれば良いです。詳しいことは次のようなキーワードでマニュアルやカーネルソースを漁れば出てきますが深入りしない方が良いでしょう。
controlling terminal
controlling process
job control
ついでに、#2の方が言われているのは端末ドライバとは別にbashが駄目押しで出すSIGHUPのことですが、ジョブ制御が絡むと効いてきます。
この回答への補足
ありがとうございます。
ちなみにもし知っていたら、、SIGHUPする対象のプロセスはloginと同じPGIDなのでしょうか?
controlling terminalで調べるとPGIDがたくさん出てきたので・・(理解できませんでしたが^^;
何にせよ、ちょっと勉強しないと分からないみたいですね・・
No.2
- 回答日時:
シェルが終了する時に sub process をどう扱うかは,間違いなく親シェルの仕事でしょう.実際にどう扱うかはシェルの種類によると思います.
Linux の bash では,exit で終了したときには,sub process は生き残り,親シェルが強制終了させられると,sub process も共倒れになるようです.挙動の詳細は man page に書いてあります.
sub process を終了させずにシェルを抜けたいというのがご質問の背景にあるのなら,nohup とかが使えませんか?
この回答への補足
ありがとうございます。
背景には、
親が死んだら子も死ぬプログラムが組みたくて
シェルはどうしてるのかなと思って質問しました。
シェルは場合によっては子が死んだり残ったりするんですね。。
混乱してきた^^;
No.1
- 回答日時:
SIGHUPを送るのはログインシェルとして実行
したときだけだったような・・・私も憶えてないです。
あと、SIGTERMで終了するときとexitで終了するときで
挙動が違う可能性も十分にあるわけで・・・
確実にだれがおくったか調べたいならSIGHUPをうける
ハンドラをsigactionをつかってSA_SIGINFOフラグをたて
siginfo構造体のsi_pidをしらべればいいとおもいます。
POSIX準拠な関数なのでたぶんソラリスにもはいってるはず。
(そういうサンプルプログラムを自分で書くということです)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- 工学 PID制御 1 2022/07/27 11:50
- Windows 10 WIN10(MAC-bootcamp)で 起動時のパスWが どうにもならない 2 2023/06/30 11:40
- オープンソース Pythonのコードをexe化 1 2023/07/03 08:01
- 作詞・作曲 中森明菜『ミ・アモーレ』の歌詞では、ISAS打ち上げの小惑星探査機ハヤブサの数奇な運命を暗示してる? 2 2022/11/18 19:51
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- CPU・メモリ・マザーボード 今のCPUは2nmプロセスとか何やらで製造されているかと思いますが、このスケールをどんどん大きくして 3 2023/06/07 20:34
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- C言語・C++・C# win10で、正確な待ち時間の作り方 6 2023/02/14 18:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
.cshrc ファイルについて
-
シェル 会話形式でエンターキ...
-
コマンドプロンプトのようなもの
-
export と set は違うの?
-
シェルスクリプトのbashとperl...
-
Linuxシェルでの大量データ投入...
-
Thunderbirdで既読にしても、シ...
-
Cシェルでのファイルからの入...
-
pc98のコマンドプロンプトからD...
-
文字の折り返し
-
bashでの変数の引渡し方法
-
標準出力について
-
apache停止してたら再起動させ...
-
logoutしたとき消えるプロセス...
-
msys(cygwin)で、シェルスクリ...
-
mac os x10.6.4のターミナルでp...
-
右クリックでファイル名をコピ...
-
シェル??? スクリプト???
-
Dirコマンドでフォルダ内ファイ...
-
スクリプトのエラー「unexpecte...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Cシェル内でBシェルの様な関数...
-
export と set は違うの?
-
ubuntuの端末の左にカレントデ...
-
『存在するかどうか分からない...
-
シェル 会話形式でエンターキ...
-
.cshrc ファイルについて
-
シェル(ksh)で変数にある文字列...
-
posixでshellを起動したとき`da...
-
ターミナルが全く入力できない
-
シェルスクリプトのbashとperl...
-
lsコマンド部分一致方法
-
コンソールでの上下左右矢印ボ...
-
msys(cygwin)で、シェルスクリ...
-
Tabキー補完や↑キーのヒストリ...
-
シェルスクリプトに関する問題...
-
apache停止してたら再起動させ...
-
Thunderbirdで既読にしても、シ...
-
Cシェルでのファイルからの入...
-
シェルとシェルの間で環境変数...
-
コマンドプロンプトとかで、net...
おすすめ情報