回答:
GDBとプロセスIDを使用してプロセスにアタッチし、引数としてcall
コマンドを発行exit(0)
できます。
call
実行中のプログラム内で関数を呼び出すことができます。exit(0)
戻りコード0で出口を呼び出します。
gdb -p <process name>
....
.... Gdb output clipped
(gdb) call exit(0)
Program exited normally.
1行のツールとして:
gdb --batch --eval-command 'call exit(0)' --pid <process id>
_exit
システムコールを呼び出すように0
します。これは、単にCPUサイクルをループさせて燃焼させるだけではないプロセスで機能します。プロセスが無限ループでスタックしない場合でも、実行可能ファイルのどこかで必要な命令を見つけて、そこに命令ポインタを向けることができれば、同じアプローチを使用できます。
いいえ。シェルがキャッチするSIGCHLD
と、無条件に戻り値をゼロ以外の値に適切に設定するため、スクリプトまたはシェルのいずれかの変更が必要になります。
よくわかりませんが、リストされた信号のいずれかが受信されると、これは0で終了します。関数の呼び出しなど、他のアクションを実行できます。
#!/bin/bash
trap 'exit 0' SIGINT SIGQUIT SIGTERM
No symbol table is loaded. Use the "file" command
。たとえば、アセンブリで書かれたプログラムです。これは非常にまれですが。