kill -0 は何をするのでしょうか?












5















kill -0 という手段を初めて知ったので、kill -0 の用途を質問させてください。



kill の man には以下のように書かれています。




sig に 0 を指定した場合、シグナルは送られないが、 エラーのチェックは行われる。これを使って、プロセス ID や プロセスグループ ID の存在確認を行うことができる。




プロセスを制御する手段として、おなじみなのは、PID をファイルに保存しておき、プロセスを終了させたいときは PID ファイルの中身の PID を指定して kill するというものです。



たとえばプロセス foobar を以下のように起動させて



foobar &
echo $! > foobar.pid


終了させるとき



kill -9 $(cat foobar.pid)


ここではシグナル 9 を送信( kill -9 )していますが、冒頭に引用したように、シグナル 0 を送信( kill -0 )することもできるようです。



kill -0 の用途としては、以下のような理解であっているでしょうか?



プロセス foobar の状態と foobar.pid ファイルの存在有無は関係が無い。つまり、foobar.pid ファイルが存在していたとしても、それがプロセス foobar が走っているという保証にはならない。ゆえに、プロセス foobar の状態を確認するために kill -0 を用いる。










共有|この質問を改善する



























    5















    kill -0 という手段を初めて知ったので、kill -0 の用途を質問させてください。



    kill の man には以下のように書かれています。




    sig に 0 を指定した場合、シグナルは送られないが、 エラーのチェックは行われる。これを使って、プロセス ID や プロセスグループ ID の存在確認を行うことができる。




    プロセスを制御する手段として、おなじみなのは、PID をファイルに保存しておき、プロセスを終了させたいときは PID ファイルの中身の PID を指定して kill するというものです。



    たとえばプロセス foobar を以下のように起動させて



    foobar &
    echo $! > foobar.pid


    終了させるとき



    kill -9 $(cat foobar.pid)


    ここではシグナル 9 を送信( kill -9 )していますが、冒頭に引用したように、シグナル 0 を送信( kill -0 )することもできるようです。



    kill -0 の用途としては、以下のような理解であっているでしょうか?



    プロセス foobar の状態と foobar.pid ファイルの存在有無は関係が無い。つまり、foobar.pid ファイルが存在していたとしても、それがプロセス foobar が走っているという保証にはならない。ゆえに、プロセス foobar の状態を確認するために kill -0 を用いる。










    共有|この質問を改善する

























      5












      5








      5








      kill -0 という手段を初めて知ったので、kill -0 の用途を質問させてください。



      kill の man には以下のように書かれています。




      sig に 0 を指定した場合、シグナルは送られないが、 エラーのチェックは行われる。これを使って、プロセス ID や プロセスグループ ID の存在確認を行うことができる。




      プロセスを制御する手段として、おなじみなのは、PID をファイルに保存しておき、プロセスを終了させたいときは PID ファイルの中身の PID を指定して kill するというものです。



      たとえばプロセス foobar を以下のように起動させて



      foobar &
      echo $! > foobar.pid


      終了させるとき



      kill -9 $(cat foobar.pid)


      ここではシグナル 9 を送信( kill -9 )していますが、冒頭に引用したように、シグナル 0 を送信( kill -0 )することもできるようです。



      kill -0 の用途としては、以下のような理解であっているでしょうか?



      プロセス foobar の状態と foobar.pid ファイルの存在有無は関係が無い。つまり、foobar.pid ファイルが存在していたとしても、それがプロセス foobar が走っているという保証にはならない。ゆえに、プロセス foobar の状態を確認するために kill -0 を用いる。










      共有|この質問を改善する














      kill -0 という手段を初めて知ったので、kill -0 の用途を質問させてください。



      kill の man には以下のように書かれています。




      sig に 0 を指定した場合、シグナルは送られないが、 エラーのチェックは行われる。これを使って、プロセス ID や プロセスグループ ID の存在確認を行うことができる。




      プロセスを制御する手段として、おなじみなのは、PID をファイルに保存しておき、プロセスを終了させたいときは PID ファイルの中身の PID を指定して kill するというものです。



      たとえばプロセス foobar を以下のように起動させて



      foobar &
      echo $! > foobar.pid


      終了させるとき



      kill -9 $(cat foobar.pid)


      ここではシグナル 9 を送信( kill -9 )していますが、冒頭に引用したように、シグナル 0 を送信( kill -0 )することもできるようです。



      kill -0 の用途としては、以下のような理解であっているでしょうか?



      プロセス foobar の状態と foobar.pid ファイルの存在有無は関係が無い。つまり、foobar.pid ファイルが存在していたとしても、それがプロセス foobar が走っているという保証にはならない。ゆえに、プロセス foobar の状態を確認するために kill -0 を用いる。







      linux






      共有|この質問を改善する













      共有|この質問を改善する











      共有|この質問を改善する




      共有|この質問を改善する










      質問日時: 2時間前









      miwarinmiwarin

      986




      986






















          2 件の回答
          2






          アクティブ

          古い順




















          1














          おおむね、その理解でよろしいかと存じますが、少し指摘をさせていただきます。



          まず、プロセスIDは使い回される場合があり、通常はインクリメントで増えていきますが、 /proc/sys/kernel/pid_max で定義される最大値を超えるとこれまでに使ったプロセスIDを利用した別のプロセスが実行される場合が有り、pidファイルに記載されたプロセスが走っている保証にはなりません。



          また、sig 0についてですが、kill from util-linux 2.33.1 のman 2 kill によると、以下のとおりになり、記載された内容とは異なります。




          If sig is 0, then no signal is sent, but existence and permission checks are still performed; this can be used to check for the existence of a process ID or process group ID that the caller is permitted to signal.



          sig に 0 を指定した場合、シグナルは送られないが、 プロセスの存在と権限のチェックは行われる。これを使って、送信者がシグナルを送信できるプロセス ID や プロセスグループ ID の存在確認を行うことができる。




          という訳で、kill の権限があるかどうかの確認に使うことも可能そうです。






          共有|この回答を改善する































            1














            該当オプションはこの質問で私も初めて知りましたが、おおむね想定されている内容で合っているのではないでしょうか。



            /var/run/***.pidファイルを使用する場合でも、何らかの理由でプロセスが終了しているのにPIDファイルが残り続けてしまう場合がごく稀にあります。



            kill -0 <PID>の方法であれば、上記のPIDファイルの有無によらず実際のプロセスの生存確認ができる、ということなのかなと思いました。
            kill -0 <PID>実行後に終了ステータス$?の値をチェックすることで生存確認ができるので、PIDを狙い撃ちでチェックしたいなら、よく使うps + greppgrepよりもシェルスクリプトなどの記述がすっきりするのかもしれません。



            参考:
            What does kill -0 do? - Unix & Linux Stack Exchange






            共有|この回答を改善する























              回答






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "581"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: false,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: null,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "提供: u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              下書きが保存されました

              下書きが破棄されました


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fja.stackoverflow.com%2fquestions%2f53077%2fkill-0-pid-%25e3%2581%25af%25e4%25bd%2595%25e3%2582%2592%25e3%2581%2599%25e3%2582%258b%25e3%2581%25ae%25e3%2581%25a7%25e3%2581%2597%25e3%2582%2587%25e3%2581%2586%25e3%2581%258b%23new-answer', 'question_page');
              }
              );

              ゲストとして投稿















              Required, but never shown

























              2 件の回答
              2






              アクティブ

              古い順










              2 件の回答
              2






              アクティブ

              古い順











              アクティブ

              古い順








              アクティブ

              古い順











              1














              おおむね、その理解でよろしいかと存じますが、少し指摘をさせていただきます。



              まず、プロセスIDは使い回される場合があり、通常はインクリメントで増えていきますが、 /proc/sys/kernel/pid_max で定義される最大値を超えるとこれまでに使ったプロセスIDを利用した別のプロセスが実行される場合が有り、pidファイルに記載されたプロセスが走っている保証にはなりません。



              また、sig 0についてですが、kill from util-linux 2.33.1 のman 2 kill によると、以下のとおりになり、記載された内容とは異なります。




              If sig is 0, then no signal is sent, but existence and permission checks are still performed; this can be used to check for the existence of a process ID or process group ID that the caller is permitted to signal.



              sig に 0 を指定した場合、シグナルは送られないが、 プロセスの存在と権限のチェックは行われる。これを使って、送信者がシグナルを送信できるプロセス ID や プロセスグループ ID の存在確認を行うことができる。




              という訳で、kill の権限があるかどうかの確認に使うことも可能そうです。






              共有|この回答を改善する




























                1














                おおむね、その理解でよろしいかと存じますが、少し指摘をさせていただきます。



                まず、プロセスIDは使い回される場合があり、通常はインクリメントで増えていきますが、 /proc/sys/kernel/pid_max で定義される最大値を超えるとこれまでに使ったプロセスIDを利用した別のプロセスが実行される場合が有り、pidファイルに記載されたプロセスが走っている保証にはなりません。



                また、sig 0についてですが、kill from util-linux 2.33.1 のman 2 kill によると、以下のとおりになり、記載された内容とは異なります。




                If sig is 0, then no signal is sent, but existence and permission checks are still performed; this can be used to check for the existence of a process ID or process group ID that the caller is permitted to signal.



                sig に 0 を指定した場合、シグナルは送られないが、 プロセスの存在と権限のチェックは行われる。これを使って、送信者がシグナルを送信できるプロセス ID や プロセスグループ ID の存在確認を行うことができる。




                という訳で、kill の権限があるかどうかの確認に使うことも可能そうです。






                共有|この回答を改善する


























                  1












                  1








                  1







                  おおむね、その理解でよろしいかと存じますが、少し指摘をさせていただきます。



                  まず、プロセスIDは使い回される場合があり、通常はインクリメントで増えていきますが、 /proc/sys/kernel/pid_max で定義される最大値を超えるとこれまでに使ったプロセスIDを利用した別のプロセスが実行される場合が有り、pidファイルに記載されたプロセスが走っている保証にはなりません。



                  また、sig 0についてですが、kill from util-linux 2.33.1 のman 2 kill によると、以下のとおりになり、記載された内容とは異なります。




                  If sig is 0, then no signal is sent, but existence and permission checks are still performed; this can be used to check for the existence of a process ID or process group ID that the caller is permitted to signal.



                  sig に 0 を指定した場合、シグナルは送られないが、 プロセスの存在と権限のチェックは行われる。これを使って、送信者がシグナルを送信できるプロセス ID や プロセスグループ ID の存在確認を行うことができる。




                  という訳で、kill の権限があるかどうかの確認に使うことも可能そうです。






                  共有|この回答を改善する













                  おおむね、その理解でよろしいかと存じますが、少し指摘をさせていただきます。



                  まず、プロセスIDは使い回される場合があり、通常はインクリメントで増えていきますが、 /proc/sys/kernel/pid_max で定義される最大値を超えるとこれまでに使ったプロセスIDを利用した別のプロセスが実行される場合が有り、pidファイルに記載されたプロセスが走っている保証にはなりません。



                  また、sig 0についてですが、kill from util-linux 2.33.1 のman 2 kill によると、以下のとおりになり、記載された内容とは異なります。




                  If sig is 0, then no signal is sent, but existence and permission checks are still performed; this can be used to check for the existence of a process ID or process group ID that the caller is permitted to signal.



                  sig に 0 を指定した場合、シグナルは送られないが、 プロセスの存在と権限のチェックは行われる。これを使って、送信者がシグナルを送信できるプロセス ID や プロセスグループ ID の存在確認を行うことができる。




                  という訳で、kill の権限があるかどうかの確認に使うことも可能そうです。







                  共有|この回答を改善する












                  共有|この回答を改善する



                  共有|この回答を改善する










                  回答日時: 1時間前









                  PicoSushiPicoSushi

                  2,3451219




                  2,3451219

























                      1














                      該当オプションはこの質問で私も初めて知りましたが、おおむね想定されている内容で合っているのではないでしょうか。



                      /var/run/***.pidファイルを使用する場合でも、何らかの理由でプロセスが終了しているのにPIDファイルが残り続けてしまう場合がごく稀にあります。



                      kill -0 <PID>の方法であれば、上記のPIDファイルの有無によらず実際のプロセスの生存確認ができる、ということなのかなと思いました。
                      kill -0 <PID>実行後に終了ステータス$?の値をチェックすることで生存確認ができるので、PIDを狙い撃ちでチェックしたいなら、よく使うps + greppgrepよりもシェルスクリプトなどの記述がすっきりするのかもしれません。



                      参考:
                      What does kill -0 do? - Unix & Linux Stack Exchange






                      共有|この回答を改善する




























                        1














                        該当オプションはこの質問で私も初めて知りましたが、おおむね想定されている内容で合っているのではないでしょうか。



                        /var/run/***.pidファイルを使用する場合でも、何らかの理由でプロセスが終了しているのにPIDファイルが残り続けてしまう場合がごく稀にあります。



                        kill -0 <PID>の方法であれば、上記のPIDファイルの有無によらず実際のプロセスの生存確認ができる、ということなのかなと思いました。
                        kill -0 <PID>実行後に終了ステータス$?の値をチェックすることで生存確認ができるので、PIDを狙い撃ちでチェックしたいなら、よく使うps + greppgrepよりもシェルスクリプトなどの記述がすっきりするのかもしれません。



                        参考:
                        What does kill -0 do? - Unix & Linux Stack Exchange






                        共有|この回答を改善する


























                          1












                          1








                          1







                          該当オプションはこの質問で私も初めて知りましたが、おおむね想定されている内容で合っているのではないでしょうか。



                          /var/run/***.pidファイルを使用する場合でも、何らかの理由でプロセスが終了しているのにPIDファイルが残り続けてしまう場合がごく稀にあります。



                          kill -0 <PID>の方法であれば、上記のPIDファイルの有無によらず実際のプロセスの生存確認ができる、ということなのかなと思いました。
                          kill -0 <PID>実行後に終了ステータス$?の値をチェックすることで生存確認ができるので、PIDを狙い撃ちでチェックしたいなら、よく使うps + greppgrepよりもシェルスクリプトなどの記述がすっきりするのかもしれません。



                          参考:
                          What does kill -0 do? - Unix & Linux Stack Exchange






                          共有|この回答を改善する













                          該当オプションはこの質問で私も初めて知りましたが、おおむね想定されている内容で合っているのではないでしょうか。



                          /var/run/***.pidファイルを使用する場合でも、何らかの理由でプロセスが終了しているのにPIDファイルが残り続けてしまう場合がごく稀にあります。



                          kill -0 <PID>の方法であれば、上記のPIDファイルの有無によらず実際のプロセスの生存確認ができる、ということなのかなと思いました。
                          kill -0 <PID>実行後に終了ステータス$?の値をチェックすることで生存確認ができるので、PIDを狙い撃ちでチェックしたいなら、よく使うps + greppgrepよりもシェルスクリプトなどの記述がすっきりするのかもしれません。



                          参考:
                          What does kill -0 do? - Unix & Linux Stack Exchange







                          共有|この回答を改善する












                          共有|この回答を改善する



                          共有|この回答を改善する










                          回答日時: 1時間前









                          cubickcubick

                          6,28421130




                          6,28421130






























                              下書きが保存されました

                              下書きが破棄されました




















































                              スタック・オーバーフローを参加してくれて、ありがとうございます!


                              • 質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。

                              しかし、次の項目を 避けてください



                              • サポートの要求、更なる説明、ほかの回答への返事。

                              • 意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)


                              さらにサポートが必要な場合 このヘルプを参考してください。




                              下書きが保存されました


                              下書きが破棄されました














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fja.stackoverflow.com%2fquestions%2f53077%2fkill-0-pid-%25e3%2581%25af%25e4%25bd%2595%25e3%2582%2592%25e3%2581%2599%25e3%2582%258b%25e3%2581%25ae%25e3%2581%25a7%25e3%2581%2597%25e3%2582%2587%25e3%2581%2586%25e3%2581%258b%23new-answer', 'question_page');
                              }
                              );

                              ゲストとして投稿















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              CARDNET

                              Boot-repair Failure: Unable to locate package grub-common:i386

                              濃尾地震