問題タブ [zombie-process]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - ptrace シグナルの送信後にゾンビプロセスを取得する
ptrace とシグナルをテストしています。
問題は、sigaction を使用してシグナルを転送し、割り込みシグナルをプロセスに送信kill(pid, SIGKILL)
した後、 ptrace(PTRACE_SYSCALL, pid, NULL, tracee_signal)
プロセスが の出力でゾンビとして出力されることですps aux
。
「マスター」プロセスを終了した場合にのみ、ゾンビプロセスは待機によって収集されたリターンステータスを持ち(「マスター」プロセスの最後に)、ゾンビでなくなります。
シグナルを受信すると、シグナル ハンドラーが呼び出され、シグナルの値がvolatile sig_atomic_t gotsig
(Rockkind) として宣言されたグローバル変数に割り当てられます。
したがって、トレーサーのメイン ループで、そのグローバル変数の値をチェックしてから、 I をチェックし>0
ますkill(pid, gotsig);
。
その次にあるのがこれptrace(PTRACE_SYSCALL, pid, NULL, tracee_signal)
。
そして、プロセスはゾンビになります。
なぜそれが起こるのですか?それは適切な行動ですか?
追加:
最新の ptrace 呼び出しの後に子を明示的に待機する必要があるためでしょうか? その終了ステータスを取得するには?
c++ - 自己実装の Linux シェル (C++) でのゾンビ プロセスの防止
Linuxシェルを自己実装しています。これでほぼ完了ですが、ゾンビ プロセスの問題を解決する必要があります。このプログラムでは、コマンドに「&」を追加することで、実行するコマンドをバックグラウンドで実行するように指定できます。
たとえば、sleep 30 & はスリープ機能を 30 秒間実行しますが、ユーザーは待機せずにすぐに別のコマンドを入力できます。
私の問題は、現在の実装ではバックグラウンド プロセスが開始されますが、実行が終了したときにプログラムに通知する方法がわからないことです。
「ジョブ」という組み込み関数があるため、いつ実行が終了したかを知る必要があります。この関数は、現在実行中のプログラムのリストを出力します。
理想的には、「sleep 30 &」を実行し、スリープが終了する前にすぐに「jobs」を実行すると、次のように表示されるはずです。
[1] [PROCESS ID HERE] sleep 30 &
ただし、30 秒経過して sleep の実行が終了した場合は、プロセスが実行されていないことを示してほしい。現在、「sleep 30 &」を実行すると、ゾンビ プロセスとして表示されます (ps -e コマンドで)。私はこれをしたくありません。これを修正するにはどうすればよいですか?
これが私のコードです:
linux - なぜゾンビプロセスが必要なのですか?
ウィキペディアは基本的に、私が知る必要があるゾンビプロセスに関するすべての可能な情報を提供しますが、親プロセスが別の子プロセスを作成する場合に PID の競合が存在しないという点で、それがどのように役立つかについての簡単な行を提供します。
これは実際にどのように「役立つ」のですか?名前付きのゾンビ プロセスがそこに保持される代わりに削除された場合、PID は利用可能ではないでしょうか?
または、ゾンビプロセスが存在する理由について他に何か理由はありますか?
zombie-process - WPF に 5000 個の ContentControl が作成されると、アプリケーションはゾンビ プロセスになります。
ボタンをクリックするたびに WPF に 5000 個の ContentControl が再作成されると、アプリケーションはゾンビ プロセスになります。
ContentControl は DataTemplate によって作成されます。メモリ使用量は増え続けています。
c - 生成されたプロセスを強制終了しようとすると、機能していないプロセスになります
シナリオ:
要求 (TCP-IP) によってデーモンを開始および停止するデーモン監視アプリケーションを開発しています。setsid()
それを実現するために、フォークした後、親プロセス (監視プロセス) から新しいプロセスを「デタッチ」するために呼び出しています。
監視アプリケーションが作成したプロセスの 1 つを強制終了しようとすると、そのプロセスは機能しなくなります。
これが私のコードです:
私が理解しているように、機能していない/ゾンビプロセスは、親がまだプロセスに参加していないことを意味します。解決しませんsetsid()
か?
unix - ゾンビ プロセス、SIGCHLD、UNIX での終了
子からのすべての出口 (_exit または exit) は、SIGCHLD をその親に送信しますか?そうである場合、ゾンビ プロセスはどのように作成されますか?待機システム コールは、通常、SIGCHLD ハンドラで呼び出されます。
linux - ゾンビプロセスを強制終了する方法
プログラムをフォアグラウンド (デーモン プログラム) で起動し、それを で殺しましたkill -9
が、ゾンビが残っており、 で殺せませんkill -9
。ゾンビプロセスを強制終了するには?
ゾンビが死んだプロセス (既に殺された) である場合、どのように出力からそれを削除しps aux
ますか?