можно ли сделать так, чтоб дочерние процессы, созданые вызовом fork() после завершения работы не висели в состоянии zombie, а прибивались, без участия родительского процесса
дык, они и так прибиваются. если род.процесс завершается раньше, чем дочерние, то процесс init завершает корректно дочерние процессы
_Serega_ да, но тогда родительский процесс ждёт дочерний... вобщем, следующий код, чтоб немного прояснить ситуацию, в коддинге под никсами я полное ламо( Код (Text): int main(int argc, char *argv[]) { int sock, client_socket; struct sockaddr_in sin; char buff[1024]; if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0) { printf("socket creation error\n"); return 0; } bzero(&sin, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(atoi(argv[1])); sin.sin_addr.s_addr = INADDR_ANY; if (bind(sock, (struct sockaddr *)&sin, sizeof(sin))) { printf("bind() error\n"); goto end; } while (1) { struct sockaddr_in client_addr; int client_addr_size = sizeof(client_addr); int len = recvfrom(sock, buff, sizeof(buff), 0, (struct sockaddr *)&client_addr, &client_addr_size); if (len > 0) { int pchild = fork(); if (pchild == 0) { // child process - do something, it may take a long time exit(0); } else if (pchild < 0) printf("fork() error\n"); } } end: close(sock); return 0; }