execvp似乎改变了进程的pid

时间:2018-04-16 21:36:45

标签: linux csh execvp

我创建了一个程序: 叉子 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

任何解决方案?

0 个答案:

没有答案