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
定义。