我想将当前进程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;
答案 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;
这是整数类型,而不是浮点类型。