我正在用 Java 创建一个命名管道,它使用以下代码:
final String [] mkfifo = {"/bin/sh", "-c", "mkfifo ~/myFifo && tail -f ~/myFifo | csh -s"};
Process p = Runtime.getRuntime().exec(mkfifo);
但是现在NoSuchFileException
当我尝试使用以下代码删除它时,我得到了一个:
Path fifoPath = Paths.get("~/myFifo");
try {
Files.delete(fifoPath);
} catch (Exception e) {
System.err.println(e);
}
我已经验证该文件确实是通过ls ~
在程序执行期间发出的来创建的,并且~/myFifo
在抛出异常并且程序执行结束后仍然存在。
我认为... && tail ...
如果它以某种方式阻塞可能会导致一些问题,所以我做了更改以创建命名管道:
final String [] mkfifo = {"/bin/sh", "-c", "mkfifo ~/myFifo"};
Process p = Runtime.getRuntime().exec(mkfifo);
管道仍然被创建,这很好。我还尝试通过以下方式以不那么原生的 Java 方式删除管道exec
:
final String [] rmfifo = { "/bin/rm ~/myFifo" };
Runtime.getRuntime().exec(rmfifo);
这些似乎都不起作用。有任何想法吗?
谢谢,埃里普