emacs の非同期プロセスの、 process-status の更新タイミングは?

投稿者: Anonymous

emacs の、非同期プロセスの process-status は、どのタイミングで更新されるのでしょう? lisp コードが実行している最中に更新されうるものなのでしょうか?具体的には:

(defun some-func (process)
  (process-status process)
  ;; some work;
  ;; process は特に操作しない
  (process-status process))

のようなコードがあったときに、これら process-status の結果は、(process の非同期の状態変化により)変わりうるものなのでしょうか?
非同期プロセスを扱う elisp を記述しようして、この疑問が生じました。

Sentinel については、


によると、 emacs が待機状態のときのみに実行される、とありますが、 process-status がいつ更新されるかの記述が見つからなかったので、質問しています。


実際には handle_child_signal (int sig) で process status の更新を行っています。関数名からも判る通り、signal(SIGCHLD) によるソフトウェア割り込みを利用しています。したがって、この関数のコメントにもある通り emacs process が実行中の間はいつでも更新されうるという事になります。

Handle a SIGCHLD signal by looking for known child processes of Emacs whose status have changed. For each one found, record its new status.

** WARNING: this can be called during garbage collection.
Therefore, it must not be fooled by the presence of mark bits in Lisp objects.

回答者: user9156

Leave a Reply

Your email address will not be published. Required fields are marked *