Нужно запустить netscape из кода.
В данном конкретном случае netscape представляет из себя скрипт, который вызывает ещё один скрипт, который в свою очередь вызывает черед форк бинарь netscape-а.
В коде есть свой форк, который по всей видимости отслеживает только завершение скриптовой части (она завершается сразу после вызова бинаря), что приводит к успешной проверке на зомби дочернего процесса. В итоге netscape не запускается. Можно ли его как-нить запустить всё-таки?
Схематично в коде это выглядит так:
S_iPID = fork();
if (S_iPID == 0)
execlp("netscape", "netscape", cbFileToOpen, (char*)NULL);
else
Message("Failed to launch Netscape");
Здравствуйте, yurick, Вы писали:
Y>Нужно запустить netscape из кода.
Y>В данном конкретном случае netscape представляет из себя скрипт, который вызывает ещё один скрипт, который в свою очередь вызывает черед форк бинарь netscape-а.
Y>В коде есть свой форк, который по всей видимости отслеживает только завершение скриптовой части (она завершается сразу после вызова бинаря), что приводит к успешной проверке на зомби дочернего процесса. В итоге netscape не запускается. Можно ли его как-нить запустить всё-таки?
Y>Схематично в коде это выглядит так:
Y>S_iPID = fork();
Y>if (S_iPID == 0)
Y> execlp("netscape", "netscape", cbFileToOpen, (char*)NULL);
Y>else
Y> Message("Failed to launch Netscape");
Вы вообще в курсе, что должен возвращать fork?
Здравствуйте, yurick, Вы писали:
Y>Нужно запустить netscape из кода.
Y>В данном конкретном случае netscape представляет из себя скрипт, который вызывает ещё один скрипт, который в свою очередь вызывает черед форк бинарь netscape-а.
Y>В коде есть свой форк, который по всей видимости отслеживает только завершение скриптовой части (она завершается сразу после вызова бинаря), что приводит к успешной проверке на зомби дочернего процесса. В итоге netscape не запускается. Можно ли его как-нить запустить всё-таки?
Y>Схематично в коде это выглядит так:
Y>S_iPID = fork();
Y>if (S_iPID == 0)
Y> execlp("netscape", "netscape", cbFileToOpen, (char*)NULL);
Y>else
Y> Message("Failed to launch Netscape");
А должно быть так:
pid_t pid = fork();
if (pid == 0) {
// Это потомок
execlp("netscape", "netscape", cbFileToOpen, (char*)NULL);
Message("Failed to launch Netscape");
} else {
// Это родитель
if (pid == -1) {
// Ошибка при создании потомка
Message("Failed to fork");
} else {
// Потомок успешно стартовал, ждём его завершения
int status;
waitpid(pid, &status, 0);
}
}