systemdユーザーインスタンス(systemd --user
)を使用すると、ユーザーが作成した各デーモンはそのインスタンスの所有です。たとえば、
- デーモンを生成しましょう
nohup sleep 100 0<&- &>/dev/null &
。 PIDがあります12549
。親端末プロセスを終了するか、シェルを直接終了してデーモンプロセスにします。 このプロセスの新しい親はsystemdユーザーインスタンスです。
UID PID PPID C STIME TTY TIME CMD phylliade 12549 20280 0 17:21 ? 00:00:00 sleep 100 phylliade 20280 1 0 09:23 ? 00:00:00 /usr/lib/systemd/systemd --user
では、どのようにこのようなことが起こりましたか?プロセス親プロセスが終了すると、カーネルは通常init(ここではデフォルトのsystemd)を新しい親プロセスとして指定し、systemdはユーザーsystemdにデーモンプロセスを割り当てますか?
ベストアンサー1
親プロセスを終了して[...]デーモンにします。
いいえ、ありません。デーモンは制御端末またはログインセッションに関連付けられていません。実行中のプロセスはnohup
まだ存在します。結局、そうでなかったら体操には意味がないでしょう。制御端子停止を無視。
親プロセスが終了すると、カーネルは通常init [...]を新しい親プロセスとして割り当てます。
いいえ、ありません。子の死神としてマークされた最も近い祖先プロセスを割り当てるか、そのような祖先プロセスがない場合は、プロセス#1に置き換えられます。世界は変わりました。
Upstart、nosh toolset service-manager
、およびsystemdはすべてこれを利用します。 3つのプロジェクトすべてのユーザー固有のサービス管理には、ローカルハーベスターが含まれます。
追加読書
- https://unix.stackexchange.com/a/177361/5132
- systemdは管理されたプロセスの子プロセスの終了をどのように処理しますか?
- https://unix.stackexchange.com/a/390089/5132
- ジョナサンデボインポラード(2018)。
local-reaper
。 nosh ツールセットのマニュアルページ。ソフトウェア。