6

Goでプロセスを強制終了するプログラムを作成しましたsyscall.Kill()

しかし、そのプロセスをfork()+で大罪にすると、そのプロセスは強制終了さsetsid()syscall.Kill()ません。

シェルを使用するkillと、どちらの場合でもそのプロセスを強制終了できます。

私はさまざまなシグナルを試しました:SIGINTとbuthey はデーモンを強制終了しませんSIGTERMSIGKILL

4

1 に答える 1

6

syscalls を使用して Go プロセスをデーモン化することは現在のところ確実に行うことができません。そのため、一種のデーモン化されたプロセスを強制終了することは不可能でした。SIGKILLカーネルはプロセスを破棄するだけで、シグナルの配信は試行されません)。

Go プロセスを適切にデーモン化するには、ラッパー プロセス ( など) を使用するか、 や などのスーパーサーバーの高度な代替プロセス、または などのスタンドアロン スーパーバイザの下で実行することをお勧めします。このdaemon場合、プロセスにブレインデッドはありません。真の Unix デーモンである必要があり、通常のプロセスのように動作する可能性があります: ダブル+トリッキーを実行しない、PID ファイル管理を台無しにしない、通常の I/O ストリームに書き込むことができるなど。initsystemdupstartrunitmonitforksetsid

于 2014-04-12T19:17:10.450 に答える