start-process
または同様の関数を使用してサブプロセスを開始したいEmacs Lispでいくつかのコードを書いています。ただし、親の emacs プロセスが終了するときに、サブプロセスを終了させたくありません。ただし、親 emacs プロセスを終了すると、常にすべてのサブプロセスも強制終了されるようです。次のコード スニペットは、これを示しています。
(require 'async)
(async-sandbox
(lambda ()
(require 'package)
(package-initialize)
(require 'async)
(shell-command "{ echo -n 'SPAWNING: '; date; } > ~/temp/ASYNC_LOG")
(start-process-shell-command "subproc" nil
"{ echo -n 'STARTED: '; date; } >> ~/temp/ASYNC_LOG;
sleep 5;
{ echo -n 'FINISHED: '; date; } >> ~/temp/ASYNC_LOG;")
(shell-command "{ echo -n 'SPAWNED: '; date; } >> ~/temp/ASYNC_LOG")
(shell-command "sleep 2")
(shell-command "{ echo -n 'FINISHED WAITING: '; date; } >> ~/temp/ASYNC_LOG")
))
このコードは、1 つの emacs プロセスを同期的に生成する(async-sandbox (lambda () ...)
ため、そのプロセスを終了して問題を引き起こすことができます。そのプロセスは、サブプロセスを非同期的に生成します(start-process-shell-command ...)
。親プロセスは 2 秒間スリープし、サブプロセスは 5 秒間スリープするため、親プロセスが最初に終了します。このコードを実行すると、ログ ファイルに "FINISHED" 行が表示されず、サブプロセスが 2 秒後に強制終了されたことを示します。親を 7 秒間待機するように変更すると、出力に FINISHED 行が表示されます。
親が終了したときにサブプロセスが殺されないように、サブプロセスを開始する同様の方法はありますか?