• ベストアンサー

Linux shutdown/reboot時の動きについて

Linuxにおいて、OSをshutdownまたはrebootすると rcスクリプトが動作したりプロセスがSIGTERMを受信したりしますが、 shutdownコマンド投入から電源断までに、 プロセスがどのような順番、方法で停止するか教えてください。 (1)rcスクリプトによる停止が先か、SIGTERM受信による停止が先か (2)SIGTERMは全プロセスに対して送られるのか (3)rcスクリプト、SIGTERM以外にもプロセスが停止する契機・方法があるか よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#136147
noname#136147
回答No.2

shutdown,reboot,halt などを実行すると /etc/inittab の該当部分のランレベルのスクリプトが動くはずです。 詳しくはman shutdown や、man inittab を参照してください。 ============= /etc/inittab より抜粋 ========================= # ランレベルごとの処理(各ランレベル用のrcスクリプトを実行し、その終了を待つ) l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 ================================================= なので、 reboot = runlevel 6 = /etc/rc.d/rc 6 halt = runlevel 0 = /etc/rc.d/rc 0 が動くと思います。 なので、どういう順番で停止されるのかを知るには この部分のスクリプトを追っていけばよいかと思います。 うちのSlackwareでは rcスクリプトで停止→killall5 -15→killall5 -9 としていますが、ディストリビューションごとに細かい部分は異なると思います。

aoi411
質問者

お礼

分かりやすい説明、ありがとうございました。

その他の回答 (1)

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.1

ディストリビューションによって異なりますが、Red Hat など RPM 系だと rc6.d 配下が走って順番にデーモンごとに最適なシャットダウン方法で落ちます。 最近の ubuntu はわかりません。

aoi411
質問者

お礼

ご回答、ありがとうございました。

関連するQ&A

  • システム停止時にコマンドを実行したい

    システムの停止時にあるコマンドを実行したいと考えています。 ネットでの情報を検索すると /etc/rc.d/halt に実行内容を登録しておけば、そのコマンドが実行されるという内容が ありましたが、実際にやってみると、実行された形跡がありませんでした。 本当にやりたいことは、システム停止時に、「ある常駐プロセスにSIGTERMを発行したい」 ことなのですが、それをコマンドを登録して実行したいと考えています。 もし、/etc/rc.d/haltに登録して実行された方か、 ほかの方法をご存知の方がおりましたら教えてください。 ちなみに、「ある常住プロセスを立ち上げたまま、システムを停止させると、そのプロセスに対して SIGTERMがOSから発行されている」と思われるのですが、このことを明確に記述されたものが 見当たりませんでした。もし、間違いなく、OSからSIGTERMが発行されるなら、それでもかまいませんが、その裏づけだけは、取っておきたいとおきたいと考えています。 この件で、ご存知の方がおりましたら、教えて頂けませんでしょうか。 OSはRedhat linux です。(正確なバージョンは今不明ですが、5.5だったかと思います)

  • 高速でリブートする方法

    LINUXの勉強をしているものです。 LILOやshutdownコマンドの検証をする際にリブートを行うのに非常に時間がかかるため困っています。(デフォルトのrunlevelを1にしましたがあまり改善せず) ハード的なものは変更できないとして、何か設定等で簡単にリブートを早める方法はないでしょうか?

  • Solarisでshutdownコマンド使えない

    Solarisでshutdownコマンドが使えません (rebootやhaltはできます) どうしてもshutdownコマンドを使用してシステムを停止したいのですが、cannot createのエラーになり シャットダウンできません。(rebootやhaltはできます) shutdownコマンドが使えない原因とエラー解消方法について教えて頂きたいです。 bash-2.05# shutdown /usr/sbin/shutdown: /tmp/sh1370: cannot create bash-2.05# less cat /tmp/sh1370 cat: cannot open /tmp/sh1370    →ファイルなし bash-2.05# chmod -Rf 753 /tmp bash-2.05# shutdown /usr/sbin/shutdown: /tmp/sh1400: cannot create

  • OS停止・リブート時のrcスクリプト

    いつも参考にしています。 OS停止・リブート時のrcスクリプトについてご教示下さい。 あるアプリの実行シェルを/usr/local/aaaa/start.shに配置し、 /etc/rc3.d/と/etc/rc5.d/配下で下記コマンドを実施し、リンクを張りました。 ln -s /usr/local/aaaa/start.sh S80aaaa この設定でOS起動時にaaaaのアプリを起動する事は出来ました。 また、/etc/rc6.d/と/etc/rc0.d/配下で下記コマンドを実施したのですが、OS起動時に停止していないように見えます。 (/var/log/messagesを見ても停止する様子が確認できません。手動でシェルを実行した場合は/var/log/messagesにログが残ります) ln -s /usr/local/aaaa/stop.sh K10aaaa ここでのstart.sh/stop.shは単純にアプリの起動コマンド・停止コマンドを書いてあるだけのものです。 /etc/rc6.d/K10aaaaaを直接手動で実行すればアプリの停止は可能です。 同じように設定しているのになぜ停止のほうだけうまく動かないのかが分かりません。何かアドバイスがあればお願いします。

  • Linuxの起動と起動スクリプトにつきまして

    Linuxの起動と起動スクリプトにつきましてご質問させてくださいませ。 chkconfig などで Sではじまる起動スクリプトを定義した場合 起動時にスタートさせるプロセスでありKで始まるものは、シャットダウン時に自動停止(引数stop)すると思いますが、たとえばSで始まるスクリプトのみ定義しておりそのスクリプトにKの定義がなかったばあい、自動停止はしないのでしょうか? シャットダウン時には、どのような挙動になるのでしょうか? その場合、killなどで強制的に切れるのでしょうか? よろしくお願い申し上げます。

  • boot時のソフト立ち上げの不具合

    RedHat Linux v.7.2を投入しまして、設定などを変更した後、rebootにより再立ち上げをしたところ、Starting httpd [ok]が表示された次のラインで停止してしまいました。Login Promptまで進むことが出来ません。対処法はございますでしょうか。また立ち上がっておりませんので、他のサーバからアクセスは出来ません。緊急時のためのbootフロッピーも作成しておりません。Unix初心者

  • Linuxアプリ起動時のローダの使いどころ

    ARM系の組み込みLinuxで、アプリを起動するときのローダの使いどころについて教えてください。 既に動作しているARM Linux機器のメンテをしています。組み込み系なのでディスプレイやGUI環境はなく、initスクリプトから直接目的のアプリを起動させています。 その起動スクリプトからアプリを起動するのに下記のようにローダld-linux.so.3を指定して起動させており、この方法では期待通りにアプリが稼働しています。 /lib/ld-linux.so.3 (目的のアプリの絶対パス) なぜ、ld-linux.so.3を通じて起動しなければならないのでしょうか?単純に、アプリのパスをスクリプトに書いておけば済むと思うのですが。(アプリ自体には実行パーミッションはつけてあります) 更に、このシステムでsshでログインして、シェルから上記のアプリをkillしたとします。その後スーパーユーザに移行して、上記と同様にシェルから、 /lib/ld-linux.so.3 (目的のアプリの絶対パス) と打ち込んでもアプリが動作しなかったです。このとき、どういった理由が考えられますか? 「動作しなかった」というのは、エラーも何も表示されず、プロンプトにも戻ってくるわけでもなく、ただダンマリになってしまいます。 別のsshシェルを開いてpsなどで確認してみますと、手動で起動した上記のプロセスは存在していますが、動いている気配が全くありません。CPU使用率もほとんど0です。 まとめると、質問したいのは下記の2点です。 1.アプリを起動するのに、ld-linux.so.3経由で起動する必要があるのはどんなときか? 2.同アプリの同じ起動方法について、initプロセスからは起動できるのに、sshシェルから打ち込んで起動しても動作しないのはどういった理由が考えられるか? よろしくお願いします。

  • 最も最近起動したpythonを中止したい

    Knoppix MathというLinuxの一種を使っています。 pythonでスクリプトを組んで、使い始めました。 現在、複数のpythonスクリプトが動作しています。 このうち、最も最近開始したpythonスクリプトを停止させたいです。 タスクマネージャーを見ましたが、どれが、それなのか分かりません。 どうやって、目的のプロセスを判別するのでしょうか。

  • コンソールアプリケーションの終了方法

    コンソールアプリケーションをC言語(Visual-C++6.0)にて開発予定です。このアプリケーションは画面を使わないのでコンソールアプリケーションにする予定です。このプログラムは常駐プロセスにし、コマンドで起動停止を行うようにする予定です。プログラムの起動はバッチファイルを作成し、そこから実行しようと考えていますが、プログラムを停止させるバッチファイルのイメージがわきません。unixの場合は、当該プロセスにSIGTERMを送信する等の方法が考えられるのですが、windowsで常駐のコンソールアプリケーションを停止させるには、どのような方法があるのでしょうか。ご存じの方ありましたら、教えてください。停止させる方法は、外部から常駐プロセスに停止である旨の何らかの事象を送り、それを常駐プロセスがキャッチし、自ら停止することを想定しています。(有無をいわさず殺すことは考えていません) 実行環境:windows2003を想定 開発言語:VC++6.0でC言語

  • コマンドフック

    linuxで全てのコマンドを投入した時にフックし、自作のスクリプトにそのコマンドを渡すような方法はないでしょうか?