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
コメント追加 |
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
コメント追加 |
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
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
linux
質問日時: 2時間前
miwarinmiwarin
986
986
コメント追加 |
コメント追加 |
2 件の回答
2
アクティブ
古い順
票
おおむね、その理解でよろしいかと存じますが、少し指摘をさせていただきます。
まず、プロセス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
の権限があるかどうかの確認に使うことも可能そうです。
コメント追加 |
該当オプションはこの質問で私も初めて知りましたが、おおむね想定されている内容で合っているのではないでしょうか。
/var/run/***.pid
ファイルを使用する場合でも、何らかの理由でプロセスが終了しているのにPIDファイルが残り続けてしまう場合がごく稀にあります。
kill -0 <PID>
の方法であれば、上記のPIDファイルの有無によらず実際のプロセスの生存確認ができる、ということなのかなと思いました。kill -0 <PID>
実行後に終了ステータス$?
の値をチェックすることで生存確認ができるので、PIDを狙い撃ちでチェックしたいなら、よく使うps + grep
やpgrep
よりもシェルスクリプトなどの記述がすっきりするのかもしれません。
参考:
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.helpers.onClickDraftSave('#login-link');
});
Google を使用して登録
Facebook を使用して登録
メールアドレスとパスワードで登録
ゲストとして投稿
Required, but never shown
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
アクティブ
古い順
票
アクティブ
古い順
票
アクティブ
古い順
票
おおむね、その理解でよろしいかと存じますが、少し指摘をさせていただきます。
まず、プロセス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
の権限があるかどうかの確認に使うことも可能そうです。
コメント追加 |
おおむね、その理解でよろしいかと存じますが、少し指摘をさせていただきます。
まず、プロセス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
コメント追加 |
コメント追加 |
該当オプションはこの質問で私も初めて知りましたが、おおむね想定されている内容で合っているのではないでしょうか。
/var/run/***.pid
ファイルを使用する場合でも、何らかの理由でプロセスが終了しているのにPIDファイルが残り続けてしまう場合がごく稀にあります。
kill -0 <PID>
の方法であれば、上記のPIDファイルの有無によらず実際のプロセスの生存確認ができる、ということなのかなと思いました。kill -0 <PID>
実行後に終了ステータス$?
の値をチェックすることで生存確認ができるので、PIDを狙い撃ちでチェックしたいなら、よく使うps + grep
やpgrep
よりもシェルスクリプトなどの記述がすっきりするのかもしれません。
参考:
What does kill -0
do? - Unix & Linux Stack Exchange
コメント追加 |
該当オプションはこの質問で私も初めて知りましたが、おおむね想定されている内容で合っているのではないでしょうか。
/var/run/***.pid
ファイルを使用する場合でも、何らかの理由でプロセスが終了しているのにPIDファイルが残り続けてしまう場合がごく稀にあります。
kill -0 <PID>
の方法であれば、上記のPIDファイルの有無によらず実際のプロセスの生存確認ができる、ということなのかなと思いました。kill -0 <PID>
実行後に終了ステータス$?
の値をチェックすることで生存確認ができるので、PIDを狙い撃ちでチェックしたいなら、よく使うps + grep
やpgrep
よりもシェルスクリプトなどの記述がすっきりするのかもしれません。
参考:
What does kill -0
do? - Unix & Linux Stack Exchange
コメント追加 |
該当オプションはこの質問で私も初めて知りましたが、おおむね想定されている内容で合っているのではないでしょうか。
/var/run/***.pid
ファイルを使用する場合でも、何らかの理由でプロセスが終了しているのにPIDファイルが残り続けてしまう場合がごく稀にあります。
kill -0 <PID>
の方法であれば、上記のPIDファイルの有無によらず実際のプロセスの生存確認ができる、ということなのかなと思いました。kill -0 <PID>
実行後に終了ステータス$?
の値をチェックすることで生存確認ができるので、PIDを狙い撃ちでチェックしたいなら、よく使うps + grep
やpgrep
よりもシェルスクリプトなどの記述がすっきりするのかもしれません。
参考:
What does kill -0
do? - Unix & Linux Stack Exchange
該当オプションはこの質問で私も初めて知りましたが、おおむね想定されている内容で合っているのではないでしょうか。
/var/run/***.pid
ファイルを使用する場合でも、何らかの理由でプロセスが終了しているのにPIDファイルが残り続けてしまう場合がごく稀にあります。
kill -0 <PID>
の方法であれば、上記のPIDファイルの有無によらず実際のプロセスの生存確認ができる、ということなのかなと思いました。kill -0 <PID>
実行後に終了ステータス$?
の値をチェックすることで生存確認ができるので、PIDを狙い撃ちでチェックしたいなら、よく使うps + grep
やpgrep
よりもシェルスクリプトなどの記述がすっきりするのかもしれません。
参考:
What does kill -0
do? - Unix & Linux Stack Exchange
回答日時: 1時間前
cubick♦cubick
6,28421130
6,28421130
コメント追加 |
コメント追加 |
スタック・オーバーフローを参加してくれて、ありがとうございます!
- 質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。
しかし、次の項目を 避けてください …
- サポートの要求、更なる説明、ほかの回答への返事。
- 意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)
さらにサポートが必要な場合 このヘルプを参考してください。
登録またはログイン
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Google を使用して登録
Facebook を使用して登録
メールアドレスとパスワードで登録
ゲストとして投稿
Required, but never shown
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
登録またはログイン
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Google を使用して登録
Facebook を使用して登録
メールアドレスとパスワードで登録
ゲストとして投稿
Required, but never shown
登録またはログイン
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Google を使用して登録
Facebook を使用して登録
メールアドレスとパスワードで登録
ゲストとして投稿
Required, but never shown
登録またはログイン
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Google を使用して登録
Facebook を使用して登録
メールアドレスとパスワードで登録
Google を使用して登録
Facebook を使用して登録
メールアドレスとパスワードで登録
ゲストとして投稿
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