fork()不执行子进程代码

时间:2011-06-18 11:21:24

标签: c process fork

我是fork()的新手,我正在试图弄清楚下面看到的程序如何不执行子进程的代码。你能帮我理解发生了什么吗?

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int glob = 1;

int main(int argc, char *argv[])
{
int local = 1;
int *dyn, pid;
char *myName = "parent";
dyn = (int *) malloc (sizeof(int));
*dyn = 1;

printf("Here it is how fork() works\n");
if ((pid = fork()) < 0)
{
    printf("Error.\n");
    exit(1);
}

printf("pid: %d", pid);
if (pid)
{
    sleep(1);
}
else
{
    glob = 2;
    local = 2;
    *dyn = 2;
    *myName = "child";
    printf("I'm the child!");
}
printf("[[ %s ]]\n glob=%d\n local=%d\n *dyn=%d\n", myName, glob, local, *dyn);
exit(0);
 }

2 个答案:

答案 0 :(得分:3)

您的子进程很可能被分段错误杀死:

*myName = "child";

无效,因为您的编译器应该告诉您(如果它没有警告,请打开警告/诊断级别。)

如果您想更改myName,则需要使用strcpy之类的内容。但你不能在myName上这样做,因为它可能指向只读内存。您应该使用动态内存对其进行初始化,就像使用dyn指针一样。

如果你需要的只是myName指向不同的字符串,你可以使用:

myName = "child";

答案 1 :(得分:1)

删除&#39; *&#39;在myName之前。

myName = "child";