Criar Processos e Matar - C/C#/C++ - Clube do Hardware
Criar Processos e Matar
C Criar Processos e Matar
15 de janeiro em C/C#/C++
Gente, estou tentando criar um programa que criar A, B, C, D e E, sendo o A o processo pai. o programa tem que fica num loop infinito imprimindo o nome do processo e seu id e a cada 5 segundos o processo pai(A) matar um filho na ordem B, C, D, E.
Quando todos os filhos tiverem mortos o processo pai imprimir a mensagem "não tenho mais filhos" e finaliza o programa.
A minha dúvida é, não estou conseguindo matar os processos filhos. O código fica em loop infinito e nunca termina.
printf("Não tenho mais filhos.\n");
if(fork()){ //B
printf("B | ID = %d\n", getpid());
kill( getpid(), SIG_TERM);
if(fork()){ //C
printf("C | ID = %d\n", getpid());
if(fork()){ //D
printf("D | ID = %d\n", getpid());
if(fork()){ //E
printf("E | ID = %d\n", getpid());
porque as chamadas a fork() estão dentro do loop?
22 horas atrás, ytalopaulo_ disse:
O código fica em loop infinito
pode ser o efeito do while(1)...
Cuidado com esse tipo de programa: esses programas que usam fork() mais de uma vez são boas maneiras de parar sua máquina. Ou pior, parar a máquina de alguém. É o efeito conhecido como fork bomb em que cada processo gera uma cópia e cada cópia gera várias cópias até parar a máquina.
Não rode isso no IDE. Em geral ele se perde.
Não rode isso em Windows. fork() é Unix --- e linux, MacOS, Android.
Que pretende com isso? Acabou de iniciar main() e vai esperar pelo que? wait() vai retornar apenas... E claro que não tem mais filhos, acabou de começar. E o printf() nem é condicional: vai imprimir sempre isso.
Essa parte não entendi mesmo: o printf() "B" vai rodar no pai. O nome do sinal está escrito ERRADO. Não vai dar em nada. Mas se fosse SIGTERM ia cancelar A SI MESMO. Uma versão de exit().
Só que o fork() criou outro processo, e esse vai rodar o fork() seguinte, e cada cópia vai gerar outras até parar a sua máquina...