c - How to terminate a program from a child process? -


i trying terminate program takes line full of commands file , process each command using execvp

however,whenever encounter quit, want exit processing commands , ignore other commands coming after it.

i tried following way using exit()

for(int =0;i < numofcommands;i++) {     childpid = fork();     if(childpid == 0)     {         if(execvp(commands[i].cmd[0],commands[i].cmd) == -1)          {             /*if(strcmp(commands[i].cmd[0],"quit"))             {                 done = true;                 return;             }*/              if(strcmp(commands[i].cmd[0],"quit")==0)             {                 printf("quit command found ! \n quitting .");                 done = true;                 //return;                  exit(0);               }             printf("command %s unknown \n", commands[i].cmd[0]);          }     }     else      {                     //parent process         wait(&child_status);     }   } } 

and happens inside of child process, after forking of course. problem program keeps processing remaining commands comes after quit before exiting program !

i think better way deal check quit command in parent process before forking child.

but if want in child, can send signal parent.

kill(getppid(), sigusr1); 

the parent process need establish signal handler sigusr1 cleans , exits. or send signal sigint, default action kill process, it's better implement clean exit.

also, in code, should check quit command before calling execvp. otherwise, if there's quit program in user's path, never match built-in quit, since execvp succeed , not return.


Comments

Popular posts from this blog

sublimetext3 - what keyboard shortcut is to comment/uncomment for this script tag in sublime -

java - No use of nillable="0" in SOAP Webservice -

ubuntu - Laravel 5.2 quickstart guide gives Not Found Error -