You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Emacs Lisp中process-send-string报错‘process not running: listen’的求助

问题分析与解决方案

1. 调用process-send-string surfer "asdf"报错的原因

你这里的surfer是服务端的监听进程(通过make-network-process并设置:server t创建的进程),它的状态是listen,仅负责等待客户端发起连接,不具备消息收发能力。只有当客户端成功连接后,服务端会生成一个对应该连接的子进程对象,你需要使用这个子进程来调用process-send-string,而非监听进程本身。

举个服务端实现的示例,通过sentinel回调捕获新连接的客户端进程:

;; 创建服务端监听进程
(setq server-listen-proc (make-network-process
                           :name "rpc-server-listener"
                           :server t
                           :host "localhost"
                           :port 12345
                           :sentinel (lambda (proc event)
                                       (when (string= event "connection established\n")
                                         ;; proc即为新连接的客户端进程对象
                                         (message "新客户端连接: %s" proc)
                                         ;; 向该客户端发送欢迎消息
                                         (process-send-string proc "已成功连接服务端")))))

2. 从已连接的客户端向服务端发送消息

客户端连接服务端后会得到一个进程对象,直接用这个对象调用process-send-string即可发送消息。示例代码如下:

;; 客户端连接服务端
(setq client-proc (make-network-process
                    :name "rpc-client"
                    :host "localhost"
                    :port 12345
                    :filter (lambda (proc string)
                              (message "收到服务端消息: %s" string))))

;; 向服务端发送消息
(process-send-string client-proc "这是客户端发送的测试消息")

服务端可以通过给客户端子进程设置:filter函数来接收并处理这些消息。

3. Emacs使用连接发送消息到服务端进程的方法

核心是获取对应连接的有效进程对象:

  • 客户端场景:连接服务端后得到的client-proc就是可直接用于发送消息的对象,调用process-send-string client-proc "消息内容"即可完成发送。
  • 服务端场景:在sentinel或:filter回调中拿到的客户端子进程对象,是对应单个客户端连接的句柄,用它调用process-send-string就能向该客户端发送消息;若要接收客户端消息,需为该子进程配置:filter函数处理收到的字符串。

额外提示:

  • 可以通过list-processes命令查看当前所有进程,状态为open的是已建立连接的进程,listen是监听进程。
  • 若丢失进程对象,可通过进程名用get-process函数获取,比如(get-process "rpc-client")。

内容的提问来源于stack exchange,提问作者L0ren2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 21:34:56