fork()之后,child没有执行

时间:2012-11-05 18:19:25

标签: c linux exec fork runtime-error

int status=0;
int PID = fork();
if(PID == 0)
{
   char *path = strcat(pathToken,strcat("/",command));
   printf("path: %s\n",path);
   execl(path,command,"-l",NULL);
}
else if(PID>0)
{
   printf("pid: %d. ",PID);
   printf("I'm parent process\n");
   wait(&status);
}

输出:

pid: 20027. I'm parent process

为什么它不输入if(PID==0)

3 个答案:

答案 0 :(得分:5)

您正尝试修改字符串文字:

strcat("/",command)

导致未定义的行为。

strcat的声明是:

char * strcat ( char * destination, const char * source );

它将源字符串的副本附加到目标字符串。

答案 1 :(得分:2)

  

问:为什么不输入“if pid == 0”)?

答:它可能会:)

两个建议:

1)在调试器下单步执行并在调用“execl()”之前查看“path”。我想你会感到惊讶。

2)务必检查代码中“execl()”的错误状态。永远不要认为它不会失败,并确保打印出有意义的错误消息(和/或优雅地恢复),如果确实如此。

答案 2 :(得分:1)

尝试更改此行

char *path = strcat(pathToken,strcat("/",command));

char * path = malloc(strlen(pathtoken) +
                     strlen(command) + 2); /* 1 for null + one for / */
strcpy(path, pathToken);
strcat(path, "/");
strcat(path, command);

我认为应该解决这个问题。