Por que o / tmp / emacs $ {UID} / server fica obsoleto após as últimas saídas do emacsclient?

0

Com o GNU Emacs 23.2.1, que eu instalei de fontes em 2 distribuições GNU / Linux diferentes (CentOS 4.xe Ubuntu Hardy - ambos com o KDE 3.x)

Eu faço:

$ emacs --daemon
("emacs")
Starting Emacs daemon.
$ emacsclient -c
Waiting for Emacs...

O Emacs começa como esperado. Então fecho o cliente. fuser /tmp/emacs${UID}/server indica que o soquete está ativo e o processo emacs --daemon está em execução.

$ emacsclient -c
Waiting for Emacs...

O Emacs não inicia. fuser /tmp/emacs${UID}/server indica que o soquete está obsoleto e o processo emacs --daemon não existe mais. E assim:

$ emacsclient -c
emacsclient: connect: Connection refused
emacsclient: No socket or alternate editor.  Please use:

        --socket-name
        --server-file      (or environment variable EMACS_SERVER_FILE)
        --alternate-editor (or environment variable ALTERNATE_EDITOR)

Quando mantenho pelo menos um cliente em execução, posso abrir e fechar quantos outros clientes desejar.

Então, minhas perguntas são:

  1. Alguém mais pode ver esse comportamento?
  2. Existe uma maneira de manter o soquete ativo mesmo depois que o último cliente sai?
  3. Existe uma boa maneira de verificar se o soquete permitirá abrir outro cliente?
  4. Por que o soquete fica por perto se não puder mais ser usado?

Edit: parece que emacs --daemon segfaults. Eu postei como erro 7149

    
por Chen Levy 30.09.2010 / 14:53

2 respostas

1

Can anybody else see this behavior?

Sim, embora meu estilo de trabalho seja diferente. Eu tenho (server-start) no meu arquivo .emacs em vez de usar argumentos de linha de comando.

Is there a way to keep the socket alive even after the last client exits?

Você está usando o C-x # para fechar os buffers do cliente de forma limpa?

Is there a way to keep the socket alive even after the last client exits?

Acho que tenho que M-x server-start em um Emacs que está ativo há alguns dias ou mais. Não é exatamente mantê-lo vivo, mas recriá-lo.

Why does the socket stays around if it can no longer be used?

Eu acredito que isso seja um bug.

    
por 30.09.2010 / 16:10
0

Consegui superar esse problema excluindo o diretório que contém o soquete. Eu corri:

strace emacsclient -c

e vi estas linhas:

stat("/tmp/emacs1000/server", {st_mode=S_IFSOCK|0700, st_size=0, ...}) = 0
connect(3, {sa_family=AF_FILE, path="/tmp/emacs1000/server"}, 23) = -1 ECONNREFUSED (Connection refused)

que mostra o diretório onde o arquivo de soquete está localizado, então tudo que eu precisava fazer era excluir este diretório:

rm -rf /tmp/emacs1000
    
por 18.04.2011 / 21:25