fork () не выполняет код дочернего процесса - PullRequest
0 голосов
/ 18 июня 2011

Я новичок в 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 ]

3 голосов
/ 18 июня 2011

Ваш дочерний процесс, скорее всего, остановлен из-за ошибки сегментации:

*myName = "child";

недопустимо, поскольку ваш компилятор должен был сказать вам (если он не предупреждал об этом, пожалуйста, включите уровень предупреждений / диагностики).

Если вы хотите изменить myName, вам нужно использовать что-то вроде strcpy. Но вы не можете сделать это на myName, потому что это может указывать на постоянную память. Вы должны инициализировать его динамической памятью, как вы делаете для указателя dyn.

Если все, что вам нужно, это то, что myName указывает на другую строку, вы можете использовать:

myName = "child";
1 голос
/ 18 июня 2011

удалите '*' перед myName.

myName = "child";
...