--- title: Emacs内でのプロセス制御について author: kazu634 date: 2009-11-29 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4955;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Emacs ---
Emacs-Lisp では、外部プログラムを二つの方法で呼び出すことが可能:
「call-process」を使うよ。使い方は:
(call-process プログラム &optional 入力ファイル 出力バッファ 表示 &rest 引数...) (call-process "ls" nil t t "-lF" "~/")
「start-process」を使うよ。使い方は:
(start-process "プロセス名" バッファ プログラム &rest 引数) (start-process "Search file" "*scratch*" "find" "/" "-name" "*.bak" "-ls")
このような形で用いると、 scratch バッファにfindのコマンド結果が出力される。 Emacs はプロセス名でコマンドを管理する。プロセスの状態を知りたいときは「process-status」を用いる。
非同期で実行したプロセスの状態が変化した時に呼び出される関数を「監視関数」と呼び、次の関数で設定します:
(set-process-sentinel プロセス 監視関数)
監視関数は少なくとも「プロセス」と「プロセスの状態」の二つを引数とします。