我创建了一个程序: 叉子 2.从儿子,用csh创建execvp。 execvp csh运行一个脚本a.sh,它以无限循环打印。
我的问题是我不能从父亲那里停止或杀死进程(使用kill(SIGKILL,pid)来自父进程不起作用)。 我认为问题出在execvp中。 当我从脚本中打印pid(echo $ BASHPID)时,我从execvp之前获得的pid得到了不同的pid。我知道execvp之后的pid应该保持不变,但似乎没有。
这是有问题的代码:
int ExeExternal(char* args[MAX_ARG], char* cmdString, int* fg_pid, char** L_Fg_Cmd){
//int child_status;
int pID;
pID = fork();
switch(pID) {
case -1: //error
perror("fork");
return 1;
case 0 : // Child Process
setpgrp();
printf("son getpid() : %d",getpid());
fflush(stdout);
char* argument_for_cshs[5];
char* cmd="csh";
argument_for_cshs[0]="csh";
argument_for_cshs[1]="-f";
argument_for_cshs[2]="-c";
argument_for_cshs[3]=cmdString;
argument_for_cshs[4]=NULL;
execvp(argument_for_cshs[0],argument_for_cshs);
//if return => there is a problem
任何解决方案?