私のプログラムでfork()の子プロセスがいくつか処理されてから無限ループに入ります(子プロセスは無限です) 。今、私は、すべてのプロセスを殺すソケットを閉じ、はCtrl +CまたははCtrl +Zしてプログラムを終了するには、共有メモリ、およびクリーンなすべての類似したものをデ添付する。私はインターネットを検索して、SIGSTOPやSIGINTのようなシグナルを送ることでそれを行うことができることを発見しましたが、私はそれをどうやって行うのか分かりません。私のプログラムでこれをどのように達成できますか?ctrl + Cまたはctrl + Zで親プロセスとその子プロセスを強制終了する方法
答えて
プロセスが残酷に終了すると、すべてのリソースが確実に解放されます。
しかし、振る舞いを制御したい場合(どのような順序など、私にはわからない)、シグナルハンドラをインストールする必要があります。 sigaction(2)
を参照してください。
共有メモリはその例外の1つです。セグメントは破壊のためにマークされ、その後、そのセグメントの出口のすべてのクライアントがメモリが解放されるときにマークされなければならない。 http://linux.die.net/man/2/shmctl – Sam
プログラムの外側からは、kill
コマンドを使用して任意のプロセスに信号を送信できます。
デフォルトでは、killはSIGTERM
シグナルを送信し、プロセスを終了し、割り当てられたリソースを解放します。 ps
コマンドを使用して、プログラムのプロセスのプロセスIDを見つけることができます。 CTRL - Cを使用すると、親プロセスのみが終了します。子プロセスを強制終了しません。 forkして新しいプログラムをexecしなかった場合、すべての子プロセスは親と同じ名前になります。つまり、killall
コマンドを使用してすべてを一度に終了することができます。リモートでログインしている場合、ログアウトすると、セッション中に生成したすべてのプロセスにSIGHUP
シグナルが送信され、デフォルトで終了します。
プログラム内からは、コマンドと同様に動作するkill()
関数があります。プロセスIDは依然として必要なので、親コードがforkによって返された子プロセスIDを覚えておくことが重要です。
- 1. プロセスを強制終了しないctrl + c
- 2. Ctrl + cバッチファイルではなく終了プロセス
- 3. ctrl + Cでシェルスクリプトによって開かれたすべてのプロセスを強制終了するには?
- 4. すべての子プロセスを強制終了しますが、親プロセスは終了しません。
- 5. npm子プロセスを強制終了する方法
- 6. python subprocess.Popen子プロセスでのプロセスの終了
- 7. のpppd - Ctrl + Cで終了し、バックグラウンド・プロセスとして設定した場合
- 8. CTRL-Cでbashスクリプトによって開始されたプロセスを終了する
- 9. 子プロセスが終了した後、親プロセスを実行する方法は?
- 10. 子プロセス内のSIGINTが親プロセスに伝播し、親プロセスを強制終了させないようにするにはどうすればよいですか?
- 11. node.exeの子プロセスを強制終了するには?
- 12. Cでは、親プロセスが終了すると、子プロセスは自動的に終了しますか?
- 13. 親スクリプトを終了せずにCtrl-Cでプログラムを終了
- 14. スクリプトでのプロセスの強制終了
- 15. 子プロセスを持つRubyでフォークプロセスを強制終了する
- 16. DB2でプロセス/クエリを強制終了する方法
- 17. WindowsのCtrl + Zで入力の終了を知らせるC++?
- 18. 親プロセスによって子プロセスを強制終了するにはどうすればいいですか?
- 19. Emacs:PythonプロセスがCtrl-Cで終了しないようにするには
- 20. 子プロセスを強制終了し、子プロセスをpsutilまたはサブプロセスなしで実行する
- 21. Powershell ISEはプロセスを強制終了してフリーズします
- 22. ホットスポットクラッシュ時にJavaプロセスを強制終了する方法
- 23. WiXからプロセスを強制終了する方法
- 24. プロセスが強制的に強制終了された場合の終了コード
- 25. Node.jsの子プロセスに "CTRL + C"を送信するには?
- 26. pm2 --no-daemonプロセスを強制終了する方法
- 27. cで親プロセスと子プロセスを共有する方法
- 28. gdb:子プロセスを強制終了せずにプロセスを実行中に割り込みする
- 29. Java ProcessBuilder process.destroy()はwinXPで子プロセスを強制終了しません
- 30. は、PostgreSQLのプロセスを終了、それはPostgreSQLのプロセスを終了まだそこ
^Zは一般的にプログラムを終了しませんが、後で続けることができるように一時停止します。 –
あなたはおおよそ答えを得ていると思います。シグナルを他のプロセスに送るためのシステムコールについては、kill(2)のマニュアルページを参照してください:http://linux.die.net/man/2/kill また、シグナルハンドラ、 sigactionのmanページを参照してください。あるいは、シグナルが受信されたときにコードをディスパッチするために、ステートマシンであるlibevを使うことを強くお勧めします。それは間違いからあなたを守ります。 – Sam