У меня есть 2 программы, обе написаны на Java. Первый запускает несколько экземпляров второго, а затем связывается с ними через файлы каналов. При запуске 2 экземпляров программы (я назову модуль запуска A и остальные B и C) все работает нормально. Файлы канала находятся в / tmp / [pid of A] / B и / tmp [pid of A] / C. Если B или C закрываются, другие должны продолжать работать, что и происходит, за исключением того, что вся папка / tmp / [pid of A] исчезает.
Другая программа обнаруживает это и пытается закрыть себя, потому что это не должно работать без файлов канала.
Мои вопросы: почему он продолжает работать, если файлы каналов пропали? и почему они вообще исчезают?
Если C закрывается, то A и B продолжают работать. Единственный код, который выполняется, это System.exit(0);
, и кроме сообщений о процессах, полученных из каналов А, ничего не делает.
EDIT:
По запросу код, который создает каталог и каналы.
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.