Как сохранить идентификатор процесса в глобальной переменной? - PullRequest
0 голосов
/ 10 января 2019

Я хочу сохранить текущий идентификатор процесса в переменной.

Итак, я делаю это:

double id = 0; //Global variable

.....

id = getpid();

printf("%d %d", id, getpid()); // the result ins't the same...

Что ж, я ожидал сохранить идентификатор текущего процесса в глобальной переменной.

Edit:

new_pid = fork();
//new_pid2 = fork();
switch(new_pid) {
case -1:
        perror("fork failed");
        exit(1);
case 0:
        kill(getppid(), SIGUSR1);
        signal(SIGUSR1, trata_SIGSEGV);
        break;
default:
        signal(SIGUSR1, trata_SIGSEGV);
        kill(new_pid, SIGUSR1);
        break;
}
break;

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Проблема в том, что вы печатаете id в неправильном формате. Вы должны либо использовать %f:

printf("%f %d", id, getpid());

Правильный спецификатор формата для double в printf

или приведите его к int:

printf("%d %d", (int)id, getpid());

Лучше было бы использовать правильный тип при объявлении id:

pid_t id;

Это целочисленный тип, а не тип с плавающей запятой.

0 голосов
/ 10 января 2019

Проблема здесь заключается в использовании printf. Ваша переменная id имеет тип double, и вы передаете ее в printf, когда она ожидает int. Это полностью сломает результат.

Заменить

double id = 0;

с

long id;

чтобы сохранить его как целочисленный тип.

Также замените

printf("%d %d", id, getpid());

с

printf("%ld %ld", id, (long) getpid());

, чтобы гарантировать, что ожидаемый тип передается в printf.

Кроме того, нет необходимости инициализировать id в 0, поскольку вы безоговорочно назначаете его позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...