Я делаю это назначение, в котором генерируется несколько дочерних процессов, и если они прерываются (ctrl- \ или ctrl-4), вместо этого должен выполняться родительский процесс. Это код:
int main(int argc, char *argv[])
{
/* The rest of the code is omitted. "times", "arg1"
and "cmd1" are parameters passed when running the program */
for(cont = 0; cont < times; cont++)
{
pid = fork();
if(pid == 0)
execvp(arg1,cmd1);
else if (pid >0) {
wait(&status);
if (WCOREDUMP(status) !=0)
printf("Core dump generado\n");
}
}
return 0;
}
Программа запускает команду Linux несколько раз, при этом argv[1]
- это количество раз, arg[2]
, argv[3]
и т. Д. Для самой команды Linux.
Работает нормально, если не отменено. Но когда я пытаюсь прервать его (например, с помощью команды sleep и затем набрать ctrl-4):
./ntimes 2 sleep 10
^\Quit (Core dumped)
генерирует дамп. Я хочу, чтобы родительский процесс печатал сообщение вместо этого. Я пробовал с функциями обработки сигналов и многими другими вещами, но я не могу заставить его работать.