因此,在clojure项目(使用lein run启动)中,我调用:
(ProcessBuilder. (into-array ["bash" "-c" "cd some-folder ; lein run"])在某个文件夹的项目中,有一个循环(read/line),它等待来自父文件夹的输入。
但是,将输入发送到:
^InputStream (.getOutputStream child-process) ; doesn't work.没有到达clojure代码,这是由于lein依次启动了一个进程。如何获得子进程中的clojure代码正在侦听的流?
发布于 2018-04-30 05:39:58
我的第一个想法是“为什么?”但是,如果一定要这样做,也许Unix named pipe会是一个很好的答案。这会创建一个FIFO缓冲区,读取器和写入器都将其视为普通文件:
在Unix中
命名管道使用文件系统,而不是传统的未命名shell管道。它是使用mkfifo()或mknod()显式创建的,两个单独的进程可以按名称访问管道-一个进程可以作为读取器打开它,另一个进程作为写入器打开它。
例如,可以创建一个管道并设置gzip来压缩通过管道传输到该管道的内容:
mkfifo my_pipe
gzip -9 -c < my_pipe > out.gz &在单独的进程shell中,可以独立地发送要压缩的数据:
cat file > my_pipe可以像删除任何文件一样删除命名管道:
rm my_pipe另一种解决方案是让编写器使用一个命名文件(可能是/tmp)来写入子进程的输入数据。或者,您可以让父进程和子进程通过套接字进行通信,可能会来回发送序列化的EDN数据。
https://stackoverflow.com/questions/50091468
复制相似问题