gpt4 book ai didi

java - 管道文件消失但仍然有效

转载 作者:行者123 更新时间:2023-11-29 06:23:23 24 4
gpt4 key购买 nike

我有 2 个程序,都是用 Java 编写的。第一个启动第二个的几个实例,然后通过管道文件与它们通信。当运行程序的 2 个实例时,(我将调用启动器 A 和其他 B 和 C)一切正常。管道文件位于/tmp/[A 的 pid]/B 和/tmp[A 的 pid]/C。如果 B 或 C 关闭,那么其他的应该继续工作,除了整个/tmp/[A 的 pid] 文件夹消失。

另一个程序检测到这一点并尝试关闭自身,因为没有管道文​​件它不应该工作。

我的问题是,如果管道文件消失了,为什么它还能继续工作?为什么它们首先消失了?

如果 C 关闭,则 A 和 B 继续运行。唯一运行的代码是 System.exit(0);,除了处理从管道 A 接收到的消息外,什么都不做。

编辑:

根据请求创建目录和管道的代码。

File dir = new File("/tmp/" + pid);
dir.mkdirs();

File aDir = new File(dir, "A");
aDir.mkdirs();

File bDir = new File(dir, "B");
bDir.mkdirs();

Runtime.getRuntime().exec(new String[] {"mkfifo", PIPE_NAME}, null, aDir);
Runtime.getRuntime().exec(new String[] {"mkfifo", PIPE_NAME}, null, bDir);

实际代码稍微复杂一些,但这是基本思想。

当程序关闭时。

frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

读取和写入线程是在其自己的线程中完成的,使用 BufferedReader 和 BufferedWriter 对象将其视为普通文件。

最佳答案

我无法回答为什么管道文件被删除,没有足够的信息。

我可以回答为什么程序仍然有效。在 unix 中,从目录中删除文件名不会删除该文件。仅当不存在更多目录条目且文件未被程序使用时,才会删除该文件。

关于java - 管道文件消失但仍然有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2071440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com