問題タブ [setsid]
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.
linux - ログアウトしてもデーモンが終了しないのはなぜですか?
Linuxのプロセスグループとセッションについて読んでいます。このサイトから私は見る:
ユーザーがシステムからログアウトすると、カーネルはユーザーが実行していたすべてのプロセスを終了する必要があります...このタスクを簡素化するために、プロセスは一連のセッションに編成されます。セッションのIDは、setsid()システムコールを介してセッションを作成したプロセスのpidと同じです。そのプロセスは、そのセッショングループのセッションリーダーと呼ばれます。そのプロセスの子孫はすべて、特に自分自身をセッションから削除しない限り、そのセッションのメンバーになります。setsid()関数は引数を受け取らず、新しいセッションIDを返します。
この記事で述べられていないのは、OSがユーザーのセッションを終了することを決定したときです。私の最初の仮定は、誰かがTTYにログインすると、TTYがセッションリーダーであり、そのセッションで呼び出されるすべてのプロセスは、呼び出しない限りTTYに属するというものsetsid()
でした。ただし、最も単純な例で確認できるように、これは明らかに間違っています。この「デーモン」を考えてみてください...(実際のデーモンではないことはわかっていますが、フォークします)...
コードから、子が継続的にファイルに書き込み、親が終了することがわかります。私は決して電話をかけないことに注意してくださいsetsid()
。
ログインしてデーモンを実行し、次にログアウトしてからログインしても、デーモンはまだ実行されています。呼び出しを削除できますがfork()
、予想どおり、ログアウトするとプロセスが終了します。ログアウトしたときにフォークがアプリを終了しない理由を誰かが説明できますか?
linux - setsid がシェルスクリプトから終了できなかったのはなぜですか?
「test1.sh」シェル スクリプトがすぐに終了しません。
「test2.sh」シェルスクリプトはすぐに終了します。
誰か説明してくれませんか?どうもありがとう。
linux - setsid によって初期化されたデーモンを終了するには?
setsid コマンドを使用してプロセス (websocket サーバー) を開始します。
しかし、どうすればそれを止めることができますか? pidを取得して殺す方法がわからないだけで、現在実行されていると確信しています。
linux - gdb でプロセスをデバッグし、ターミナルを閉じます
リモート サーバーで実行するアプリケーションにバグがあります。数時間実行した後、アプリケーションは SIGSEGV を取得して終了します。
ssh を介して gdb を使用してリモート アプリケーションをデバッグしたいので、プログラムが SIGSEGV を取得すると gdb が停止し、何が起こったかを確認できますが、ssh セッションをサーバーに接続したままにすることはできません。私は実行しようとしています:
しかし、ssh ターミナルを閉じると、gdb とアプリがすぐに終了します。
私の質問:
- ターミナルを閉じるときにgdbを実行したままにするにはどうすればよいですか
- 後で再接続するにはどうすればよいですか?
strace
端末を閉じた瞬間の gdb では、次のように表示されます。
linux - プロセスが fork してから setsid を実行した場合にプロセスが子であるかどうかを確認する方法はありますか
プロセスがした場合、fork
子がした場合、setsid
それが最初のプロセスの子であったことを伝える方法はありますか? そのようなプロセスを親と一緒に強制終了する方法はありますか?