LINUX.ORG.RU

Отучить дочерний процесс наследовать файловые дескрипторы

 , ,


0

2

Здарова котаны!

Пишу софтину, она слушает tcp порт (9555). Так же она запускает дочерние процессы. Это та же программа, но запущенная с другим аргументом (–backend). Запускаю через QProcess из фреймворка Qt, я не знаю как он там внутри это делает. Дочерние процессы наследуют дескрипторы. Смотри на выхлоп lsof. Там три программы слушают один и тот же порт. Я почитал и вроде это не баг, а фича. Но мне всё равно это сильно мешает. Как от этого избавиться? Ппц, ну это вообще не в какие ворота.

➜ ~ lsof -i -P -n | grep 9555
retr 136948 ox55ff    7u  IPv4 438139      0t0  TCP *:9555 (LISTEN)
retr 136948 ox55ff    8u  IPv4 438196      0t0  TCP 127.0.0.1:9555->127.0.0.1:34772 (ESTABLISHED)
retr 137028 ox55ff    7u  IPv4 438139      0t0  TCP *:9555 (LISTEN)
retr 137028 ox55ff    8u  IPv4 438196      0t0  TCP 127.0.0.1:9555->127.0.0.1:34772 (ESTABLISHED)
retr 137030 ox55ff    7u  IPv4 438139      0t0  TCP *:9555 (LISTEN)
retr 137030 ox55ff    8u  IPv4 438196      0t0  TCP 127.0.0.1:9555->127.0.0.1:34772 (ESTABLISHED)

➜ ~ ps -Af | grep "retr"
ox55ff     136948  136946  0 16:17 pts/3    00:00:00 /home/ox55ff/projects/builds/program/retr/retr --frontend
ox55ff     137028  136948  0 16:17 pts/3    00:00:00 /home/ox55ff/projects/builds/program/retr/retr --backend
ox55ff     137030  136948  0 16:17 pts/3    00:00:00 /home/ox55ff/projects/builds/program/retr/retr --backend

★★★★★

форк делает копию процесса вместе со всеми дескрипторами. возьми и закрой все дескрипторы, ну или не открывай их до форка.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.