場合によっては、作業を外部プロセスに委任するときに、コマンドにタイムアウトを設定して、Emacsが無期限にハングアップするのを防ぐと便利です。
残念ながら、以下は機能しません。
(with-timeout (1 nil)
(call-process "/usr/bin/bash" nil t nil "-c" "sleep 10"))
同じことがについても言えshell-command
ます。
これらの同期プロセスにタイムアウトを設定する方法はありますか?
つまり、プロセスが特定の秒数以内に完了しない場合、プロセスが自動的に強制終了されるようにしたいです。それは可能ですか?
確かではありませんが、プロセスの出力を受け入れると役立つ場合があります。つまり、Emacsにイニシアチブをとり、いくつかのElispコードを実行するように指示します。おそらくプロセスが出力を生成するのを待っています。おそらく、それがタイムアウトになった場合にプロセスを強制終了するのにも良い時期です。
—
wvxvw 2015年
@wvxvw
—
マラバルバ2015年
call-process
上記は、現在のバッファーに出力を出力するように設定しています(別の出力バッファーを渡しても同じ効果が得られます)。そういう意味ですか
実際、Github:github.com/emacs-mirror/emacs/blob/…で調べようとしましたが、いいえ、プロセスのタイムアウトの設定などを行うコードはありません。
—
wvxvw 2015年
with-timeout
したことがkill-process
ありdelete-process
ます。