22873


elisp 上で扱われる process
オブジェクトには、名前(name)の情報がひも付けられています。(<https://www.gnu.org/software/emacs/manual/html_node/elisp/Process-
Information.html>)

この名前は、そのサブプロセスを実行する際に、 `start-
process`の引数として指定されたものが利用されますが、この時に与える名前の文字列として、何か制約はありますか。

文字列は、文字列であるための制約上、おそらくヌル文字を含むことはできないとは思っていますが、それ以外の任意の文字であるならば、特に利用しても問題がないのでしょうか。

* * *

背景: シェルコマンドを非同期で実行するようなパッケージを、とある事情で自作してみようとしていた際に、 process
の名前を、その実行しようとしているシェルコマンドそのもの(に適当な prefix
をつけたもの)を与えるのが、管理上わかりやすいかと思ったのですが、果たしてそれで本当に問題がないのか、若干疑問に思ったからです。(そんな風にしてプロセスオブジェクトの名前を決定しているコードを見たことがないため)


CC BY-SA 3.0
2016-03-06T06:13:32.517
22845
2016-03-07T02:39:43.247
754
question
elisp
elisp 上で、 process オブジェクトに与える名前に制約はありますか


結論から先に書くと「文字列であれば何でもいい」と思います。

`start-process` の定義元コードを調べてみると、第一引数が文字列かどうかを `CHECK_STRING(name)`
でチェックして、それから`make_process`を呼び出して与えられた文字列を元にして一意の文字列を生成、processオブジェクトに紐付けしています。

<http://git.savannah.gnu.org/cgit/emacs.git/tree/src/process.c?h=emacs-24#n1379>

（Emacs25では若干コードが異なりますが処理の流れはほとんど同じはずです）

[code]

    DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0,
          doc: /* ... */)
      (ptrdiff_t nargs, Lisp_Object *args)
    {
    ...
      name = args[0];
      CHECK_STRING (name);
    ...
      proc = make_process (name);
    
[/code]

また、processオブジェクトに同じ名前を複数指定した場合でもシステム側で区別できるように一意の文字列を生成してくれるため特に問題はなさそうです。


CC BY-SA 3.0
2016-03-07T02:39:43.247
22873
2016-03-07T02:39:43.247
2391
22845
answer