20457


ターミナルから `/Applications/Emacs.app/Contents/MacOS/bin/emacsclient` を使ってファイルを開くと
”Waiting for Emacs...” となってしまうので `&`
をつけてバックグラウンドで実行してるのですが、そもそも完全に切り離して使うということは出来るのでしょうか？

バックグラウンドで動かす場合の問題は

  * ターミナルのタブを閉じるとファイルが閉じる
  * ファイルを閉じるとbg job の終了がターミナル側に通知される

の二点なので上記二点を解消したいと思っています。


CC BY-SA 3.0
2015-12-29T15:24:32.657
20456
2015-12-29T17:03:15.733
3271
question
emacs
Terminalから emacsclient を開いた時に ”Waiting for Emacs...”で待機しないようにする


上の2つの問題は、nohupでおおむねクリアできると思います。

[code]

    $ nohup emacsclient somefile &>/dev/null </dev/null &
    
[/code]

あるいは、bashならdiswownとか。

[code]

    $ emacsclient somefile &>/dev/null </dev/null &
    $ disown %emacsclient
    
[/code]

zshなら&!とか。

[code]

    % emacsclient somefile &>/dev/null </dev/null &!
    
[/code]

ちなみに私の場合は、ターミナルから切り離したうえ、Emacsの中からfind-
fileしたのと同じように扱いたいので、以下のようなことをシェルスクリプトにして使っています。

[code]

    $ emacsclient -e '(find-file "somefile")'
    
[/code]


CC BY-SA 3.0
2015-12-29T16:07:34.123
20457
2015-12-29T16:07:34.123
4010
20456
answer


`disown` 以外に以下の様な方法もあります。

[code]

    $ sh -c 'emacsclient test.txt <&- >/dev/null 2>&1 &'
    
[/code]

これで emacsclient プロセスをログインシェルのプロセスグループから切り離す事ができます。一種の daemonize ですね。

[code]

    $ pgrep emacscli
    4064
    $ ps -p 4064 -o pid,ppid,args
      PID  PPID COMMAND
     4064     1 emacsclient test.txt
    $ lsof -p 4064
    COMMAND    PID USER   FD   TYPE     DEVICE SIZE/OFF    NODE NAME
    emacsclie 4064 nemo  cwd    DIR        8,7    49152  261633 /home/nemo
    emacsclie 4064 nemo  rtd    DIR        8,1     4096       2 /
    emacsclie 4064 nemo  txt    REG        8,5    22332  661576 /usr/bin/emacsclient
    emacsclie 4064 nemo  mem    REG        8,1  1807496  526869 /lib/i386-linux-gnu/libc-2.21.so
    emacsclie 4064 nemo  mem    REG        8,1   143792  526864 /lib/i386-linux-gnu/ld-2.21.so
    emacsclie 4064 nemo    0u  unix 0x00000000      0t0 1450045 socket
    
[/code]


CC BY-SA 3.0
2015-12-29T17:03:15.733
20458
2015-12-29T17:03:15.733
20456
answer