Если Вы запускаете с Cincom Smalltalk, существует тонна доступного учебного материала:
- учебные руководства - ежедневно демонстрируют на экране - видео - еженедельный подкаст
, можно найти скринкасты, видео, и подкасты на iTunes - просто ищут "Smalltalk" в разделе подкаста.
Перехватите SIGCHLD и в обработчике вызовите wait ().
Некоторые разновидности Posix (я думаю * BSD, но не цитируйте меня по этому поводу), если вы игнорируете SIGCHLD , ядро автоматически очистит процесс зомби (это то, что вы видите в ps). Это приятная функция, но ее нельзя переносить.
Я думаю, что вы пытаетесь создать процесс-демон. Прочтите эту ссылку в Википедии для объяснения.
Пример (из книги Стивена «Расширенное программирование в среде Unix») для превращения процесса в демон:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int daemon_int(void)
{
pid_t pid;
if ((pid = fork()) < 0)
return (-1) ;
else if (pid != 0)
exit(0) ; /* The parent process exits */
setsid() ; /* become session leader */
chdir("/") ; /* change the working dir */
umask(0) ; /* clear out the file mode creation mask */
return(0) ;
}
Конечно, это предполагает использование ОС, подобной Unix. .
Итак, ваша программа включает указанную выше функцию и вызывает ее, как только она запускается. Затем он отключается от родительского процесса и будет продолжать работать до тех пор, пока не завершится или не будет уничтожен.
waitpid (-1, & status, WNOHANG)
может делать то, что вам нужно: он должен немедленно вернуться, если ни один дочерний процесс не завершился. Кроме того, вы можете прослушивать сигнал SIGCHLD.
Форк для создания фонового потока, а затем выполнение. Посмотрите на этот сайт обманчивый вопрос: Можем ли мы запустить фоновый процесс, используя exec () с аргументом &?