Почему / tmp / emacs $ / server устарел после последнего выхода emacsclient?

908
Chen Levy

С GNU Emacs 23.2.1, который я установил из источников в 2 разных дистрибутивах GNU / Linux (CentOS 4.x и Ubuntu Hardy - оба с KDE 3.x)

Я делаю:

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

Emacs запускается как положено. Затем я закрываю клиента. fuser /tmp/emacs$/serverуказывает на то, что сокет активен и emacs --daemonпроцесс запущен.

$ emacsclient -c Waiting for Emacs... 

Emacs не запускается. fuser /tmp/emacs$/serverуказывает, что сокет устарел, и emacs --daemonпроцесс больше не существует. Так что:

$ 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) 

Когда у меня работает хотя бы один клиент, я могу открывать и закрывать столько клиентов, сколько захочу.

Итак, мои вопросы:

  1. Кто-нибудь еще может увидеть это поведение?
  2. Есть ли способ сохранить сокет живым даже после выхода последнего клиента?
  3. Есть хороший способ проверить, позволит ли сокет открыть другой клиент?
  4. Почему сокет остается, если его больше нельзя использовать?

Редактировать: Кажется, что emacs --daemonsegfaults. Я выложил как баг 7149

0

2 ответа на вопрос

1
kmarsh

Кто-нибудь еще может увидеть это поведение?

Да, хотя мой стиль работы отличается. У меня есть (server-start) в моем файле .emacs вместо использования аргументов командной строки.

Есть ли способ сохранить сокет живым даже после выхода последнего клиента?

Используете ли вы Cx # для чистого закрытия клиентских буферов?

Есть ли способ сохранить сокет живым даже после выхода последнего клиента?

Я обнаружил, что мне нужно запустить Mx server на Emacs, который работал уже несколько дней или дольше. Это не точно поддерживает это, но восстанавливает это.

Почему сокет остается, если его больше нельзя использовать?

Я считаю, что это ошибка.

1. Спасибо за подтверждение; Можете ли вы описать свой рабочий процесс, используя `(server-start)`? 2. Нет, но даже если это так, это, кажется, не помогает. Не выходя с `Cx 5 0`; 3. Не думай, что это применимо. 4. Я проверю, сообщается ли об этой ошибке. Chen Levy 14 лет назад 0
Другая половина моего рабочего процесса - псевдоним bash для emacsclient, который перенаправляет ввод-вывод и тихо переводит emacsclient в фоновый режим при запуске нового буфера. kmarsh 14 лет назад 0
0
fmaker

Я смог преодолеть эту проблему, удалив каталог, содержащий сокет. Я побежал:

strace emacsclient -c 

и увидел эти строки:

stat("/tmp/emacs1000/server", ) = 0 connect(3,, 23) = -1 ECONNREFUSED (Connection refused) 

которые показывают каталог, в котором находится файл сокета, тогда все, что мне нужно было сделать, это удалить этот каталог:

rm -rf /tmp/emacs1000 

Похожие вопросы