моя программа создает n дочерний процесс, каждый дочерний счетчик (+5), если он превосходит 100, он посылает сигнал родителям, родитель должен убить этого ребенка Я сделал программу, но она не будет работать, это продолжает подсчет в первом ребенке, что означает, что SIGKILL не помог здесь?SIGKILL не работает
#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
pid_t pids[10];
int pidval[10];
int l;
void handler1(int mysignal)
{
int i;
for (i=0; i<l; i++) {
if (pidval[i]>100) {
kill(pids[i], SIGKILL);
printf("\n killed ");
}
}
}
int main(int argc, char ** argv)
{
int i, s;
l = atoi(argv[1]);
pid_t pid;
for(i=0; i<l; i++)
{
pid=fork();
if(pid<0)
printf("\n error \n");
if (pid==0) {
pids[i] = getpid();
while(1) {
s+=5;
if(s>100)
{
pidval[i]=s;
printf("\noverflow,%d,%d,%d",s,pids[i],getpid());
kill(getppid(), SIGALRM);
};
}
}
if(pid>0) {
signa(SIGALRM,handler1);
waitpid(-1,NULL,0);
}
}
}
ли ваш учитель рассказать вам о правильном форматировании кода? – Devolus
лучше? @Devolus –
Прошитые процессы не имеют одинаковых переменных! Ребенок получает _copy_ стека/глобального пространства родителя, однако любые изменения, внесенные в них, не рассматриваются другим процессом (процессами). Если вы хотите правильно использовать свои данные, вам необходимо явно это сделать. – mah