C++ 为什么孩子的pid及其过程不同?

C++ 为什么孩子的pid及其过程不同?,c++,process,pid,C++,Process,Pid,这是我的代码: extern int errno; pid_t system1(const char * command) { pid_t pid; pid = fork(); cout<<"PID in child "<<(int)pid<<endl; if (pid < 0) { return pid; } else if (pid == 0) { execl("/bin/sh

这是我的代码:

extern int errno;
pid_t system1(const char * command)
{
    pid_t pid;

    pid = fork();
    cout<<"PID in child "<<(int)pid<<endl;
    if (pid < 0) {
        return pid;
    } else if (pid == 0) {
        execl("/bin/sh", "sh", "-c", command, (char*)NULL);
        _exit(1);
    }

    int stat_val;
    pid_t child_pid;
    cout << "Hello1" << endl;
    child_pid = wait(&stat_val);
    cout << "child_pid = " <<(int)child_pid<< endl;//LINE 1
    if(WIFEXITED(stat_val))
    printf("Child has terminated with exit code %d\n", WIFEXITED(stat_val));
    else
    printf("Child has existed abnormally\n");
    return child_pid;
}

int main( )
{ 
    int pid_1 = system1("setup.csh &");;
    struct stat status;
    sleep(10);
    cout<<"errno  = "<<errno<<endl;
    int i = kill(pid_1,0);
    cout<<"Pid id = "<<pid_1<<endl;
    cout<<"i === "<<i<<endl;
    cout<<"errno  = "<<errno<<endl;
    if(errno == ESRCH)
    {
        cout<<"process does not exist";
    }
    else
    {
        cout<<"process exist"<<endl;
    }
    return 0;
}
extern-int-errno;
pid_t system1(常量字符*命令)
{
pid_t pid;
pid=fork();
当您跑步时,cout:

sh -c 'setup.csh &'
原始shell进程派生另一个子进程运行
csh
。进程层次结构为:

YourProgram
    sh -c 'setup.csh &'
        csh setup.csh
无法直接在原始程序中获取此PID。为什么不直接从程序中运行
setup.csh
,而不是通过shell

实际上,有一种方法可以实现这一点。如果使用
exec
shell命令,它将在自己的进程中运行指定的命令,而不是派生子进程:

system1('exec setup.csh &');

这还不清楚。你在
第u 1行看到一个值;你看到的另一个值是什么?@OliCharlesworth使用
ps-u | grep setup.csh
我更新了我的问题。有没有办法获得process setup.csh的
PID
,如果使用
system()运行
那么我也不会得到PID。不,你也不能用
system()
得到它。它的工作方式与你的
system1()几乎相同
函数。
setup.csh
是一个孙进程,您只能直接访问子进程。不,您不能这样做。
execl
不处理命令中的shell语法。它不会分割参数,它不理解
,等等。@Balmar正如您所说的运行
system1('exec setup.csh&'))
那么,我应该如何处理传递到
system1
的命令,该命令用于处理您现有的
system1
定义。