はじめまして。
親プロセスが終了するとそのプロセスから呼ばれた
子プロセスも停止するという認識は正しいでしょうか?
というのも、あるシェルスクリプトを"kill -9"コマンドで強制終了させたのですが、そのシェルスクリプト内のコマンド(sleepコマンドです)は終了せずに残っていたので(psで確認しました)、??という感じでした。
さらにそのsleepコマンドの親プロセスが1(init?)になっていました。
色々とWEB上で調べてみたのですが、この動作について
の記述を見つけることができませんでした。
どなたかご存知でしたら是非ご教授下さい。よろしくお願いします。
No.3ベストアンサー
- 回答日時:
親プロセスが先に死ぬと子プロセスはinitプロセスの養子になるというのはunixの仕様です。
プロセスグループという概念があります。子プロセスは親プロセスのプロセスグループ番号を引き継ぎます。プロセスグループ番号はシステムコールで変更できます。変更した場合、自プロセスがプロセスグループリーダーとなって、親プロセスとは別グループになります。プロセスグループ番号は、通常はプロセスリーダーのプロセス番号です。
シェルからコマンドを起動した場合、通常は1パイプが1プロセスグループになります。
aa | bb ; cc
だと、aa と bb は同一プロセスグループ。ccは別プロセスグループ。
で、このプロセスグループ全体にシグナルを送ることが出来ます。システムコールだと、killpg(2)。コマンドだと、プロセスグループ100番にシグナルを送るとすると、kill --100 または kill -15 --100 で出来るのではないかと思います。
(やや自信なしですが、シェルでのパイプ実行中のctrl-CはプロセスグループへのSIGTERMだと思います)
プロセスグループ番号はpsコマンドで参照できます。psのオプションを調べてみてください。
別の方法として、ps の結果を解析してPPIDを調べ、プロセスの親子関係を調べ上げれば、自分が祖先になっている全プロセスをリストアップすることが出来るでしょう。それらに個別にシグナルを送る。
No.4
- 回答日時:
#3ちょっと修正。
マイナスを二つ重ねるのは全く違う別の件と勘違いでした。誤:kill -15 --100
正:kill -15 -100
誤:kill --100
正:kill -100 だと 100がプロセスグループ番号じゃなくてシグナル番号と見なされるので、kill -- -100 か kill - -100
No.2
- 回答日時:
がるです。
そうですねぇ…ちと状況が見えきっていないのですが。
killallで-g(--process-group)オプションをつけるような感じではどうでしょうか?
がるさん
度々すみません。
残念ながらAIXを使用しているため、がるさんが教えてくださった方法はできなそうです。(AIXのkill/killallコマンドのオプションが貧弱です)
やろうとしていた事は、だいたい以下のような感じです。
(1)以下のシェルスクリプトを実行
#!/usr/bin/bsh
vmstat 60 >> /hoge/log
・
・
・
(2)結果、psコマンドでは2つのプロセスが動いています。
-シェルスクリプトのプロセス(親)
-vmstat 60のプロセス(子)
(3)あらかじめファイルに保存しておいた親(シェルスクリプトの方)のPIDを読み込みkillすることで、上記2つのプロセスを終了させる。
上の例では子プロセスが1つしかない為、その子プロセスのPIDも別途保存しておいてkillするのが手っ取り早そうですが、killすべきプロセスが多い場合は、シェルスクリプトの記述が煩雑になってしまいそうだったので、うまく1つのkillコマンドで全関連プロセスを停止できれば、、と思った次第です。
なにかアドバイスが可能であれば是非お願いいたします。だめそうであれば諦めます。。
No.1
- 回答日時:
がると申します。
んっと、親プロセスが死んだときに「子プロセスが停止する」とは限りません。というか、親プロセスのもう一つ親(なので、大抵は1のinitプロセス)に結び付けられるような状態になります(っていう挙動がMUSTだったかどうかははっきりしませんが、少なくともそういう実装系は存在します)。
ですので、通常のデーモンであれば、自分がkillされたタイミングで自分からforkした全子プロセスに対してkillシグナルを出すように設計されているもんだと思います。
がるさん
お返事ありがとうございます。
結論としては、
”親プロセスが死んだときに子プロセスが停止する”というのは、意図的にそのように実装されたデーモンなど
だけであって、OSの通常のユーザープロセスに関しては当てはまらないということですね。
とすると、子シェルをたくさん呼び出している親シェルをkillすることで一括して関連プロセスを全て落とすということはできなそうですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 バッチファイルでのエクスプローラー終了 1 2022/05/30 14:32
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- その他(コンピューター・テクノロジー) Texについてです。 jpgファイルを貼り付けても表示されないのですが、どうしたら表示できますか? 1 2022/06/30 23:42
- iCloud AppleID サポートからのメール 3 2023/07/05 15:14
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- 政治 私は文部科学省ヘ入り込んで投稿した私の建議文を彼らが私の依頼まましましょうか。? 2 2023/08/22 07:08
- Firefox(ファイヤーフォックス) firefoxが頻繁に停止する 1 2023/01/09 10:26
- フリーソフト AOMEI Backupper でバックアップが取れない 2 2022/07/17 22:28
- Windows 7 chkdskの中断 1 2022/03/28 13:53
- 医学 医学に詳しい方にお尋ね致します。 摂取した水分は最終的には尿になりますが、そのプロセスがよく分かりま 4 2023/01/16 14:57
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
治せない「クセ」を教えてください
なくて七癖という言葉どおり、人によっていろいろなクセがありますよね。 あなたには治せないクセがありますか?
-
何歳が一番楽しかった?
自分の人生を振り返ったとき、何歳のころが一番楽しかったですか? 子供の頃でしょうか、それとも大人になってからでしょうか。
-
【穴埋めお題】恐竜の新説
【大喜利】 考古学者が発表した衝撃の新説「恐竜は、意外にもそのほとんどが〇〇〇」 (〇〇〇に入る部分だけを回答して下さい)
-
シェルで親プロセス終了時に子プロセスも終了させるには?
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TOPコマンドで表示するCPU使用...
-
プロセスの終了について教えて...
-
linuxでプロセスが動いているCP...
-
プロセス、サービス、デーモン...
-
強制終了できないプロセスの強...
-
HP-UXでのプロセス別メモリ使用...
-
タスクバーの音量アイコンをク...
-
Windowsで作れるスレッド最大数...
-
デーモンモードとは何でしょうか?
-
System Idle Processってなに?...
-
ネットにつなぐだけでCPU1...
-
コマンドライン上でファイルを...
-
CPU使用率が常に50~10...
-
右クリックをすると砂時計のま...
-
【Process Explorer】について
-
/etc/inittabの"wait"アクショ...
-
ERRORLEVELの使い方
-
Unixの親プロセスと子プロセス...
-
アクロバットを終了しても、プ...
-
タスクマネージャに表示されな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TOPコマンドで表示するCPU使用...
-
プロセス、サービス、デーモン...
-
タスクマネージャのCPU率がおか...
-
System Idle Processってなに?...
-
タスクバーの音量アイコンをク...
-
プロンプトが返らない
-
コマンドライン上でファイルを...
-
Windowsで作れるスレッド最大数...
-
プロセスがタスクマネージャー...
-
Windows 10のエクスプローラー...
-
アクロバットを終了しても、プ...
-
【プログラム】 iu14d2n.tmp ...
-
二重起動チェックについて
-
プロセスの終了について教えて...
-
linuxでプロセスが動いているCP...
-
Windowsで同時にオープンできる...
-
ps コマンドのステータス。S Ss...
-
ときどきCPU使用率が100%になっ...
-
Powershell プロセス二重起動
-
タスクマネージャに表示されな...
おすすめ情報