Goでプロセスを強制終了するプログラムを作成しましたsyscall.Kill()
しかし、そのプロセスをfork()
+で大罪にすると、そのプロセスは強制終了さsetsid()
れsyscall.Kill()
ません。
シェルを使用するkill
と、どちらの場合でもそのプロセスを強制終了できます。
私はさまざまなシグナルを試しました:SIGINT
とbuthey はデーモンを強制終了しませんSIGTERM
。SIGKILL
syscalls を使用して Go プロセスをデーモン化することは現在のところ確実に行うことができません。そのため、一種のデーモン化されたプロセスを強制終了することは不可能でした。SIGKILL
カーネルはプロセスを破棄するだけで、シグナルの配信は試行されません)。
Go プロセスを適切にデーモン化するには、ラッパー プロセス ( など) を使用するか、 や などのスーパーサーバーの高度な代替プロセス、または などのスタンドアロン スーパーバイザの下で実行することをお勧めします。このdaemon
場合、プロセスにブレインデッドはありません。真の Unix デーモンである必要があり、通常のプロセスのように動作する可能性があります: ダブル+トリッキーを実行しない、PID ファイル管理を台無しにしない、通常の I/O ストリームに書き込むことができるなど。init
systemd
upstart
runit
monit
fork
setsid