如何在全局变量上保存进程ID?

时间:2019-01-09 23:22:28

标签: c process

我想将当前进程ID保存在变量中。

所以,我这样做:

double id = 0; //Global variable

.....

id = getpid();

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

好吧,我希望将当前进程ID保存在全局变量中。

编辑:

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 :(得分:1)

这里的问题是使用printf。您的id变量的类型为double,当您期望printf时将其传递给int。这将完全破坏结果。

替换

double id = 0;

使用

long id;

将其保留为整数类型。

还替换

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

使用

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

以确保将预期的类型传递给printf。

此外,由于以后您无条件分配它,因此无需将id初始化为0。

答案 1 :(得分:1)

问题是您以错误的格式打印id。您应该使用%f

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

Correct format specifier for double in printf

或将其投射到int

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

一个更好的主意是在声明id时使用正确的类型:

pid_t id;

这是整数类型,而不是浮点类型。