Когда вы разветвляете свою программу; оба они имеют доступ к потоку stdout / err; который git hook, скорее всего, ожидает закрытия.
Чтобы решить вашу проблему; Если ваш разветвленный процесс, который продолжается, закрывает свой дескриптор для stdout, stderr и stdin;
close(fileno(stdin));
close(fileno(stdout));
close(fileno(stderr));
, так же как и начало нового сеанса setsid()
(что вы и сделали), он станет полностью оторванным процессом от вашего скоро ставшего мертвым процесса.
Обратите внимание, что попытка вывести что-либо впоследствии будет неопределенным поведением, если оставить его как есть.
Если вы хотите продолжать использовать только cout
или cerr
в этом процессе, я бы посоветовал вам перенаправить его, используя rdbuf
, как вы могли в тот момент после разветвления, перенаправить stdout и stderr на /dev/null
Если вы хотите использовать printf
или любое из его семейства, то вам придется заново привязать дескриптор файла stdout к чему-либо.