Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 每次执行.out时,getpid()递增5或6_C_Unix_System Calls_Pid - Fatal编程技术网

C 每次执行.out时,getpid()递增5或6

C 每次执行.out时,getpid()递增5或6,c,unix,system-calls,pid,C,Unix,System Calls,Pid,我正在研究UNIX环境中的高级编程第3版,第1章中的问题1 在OS X 10.10.5下,为什么每次执行进程时,getpid()返回的值都会增加5或6?(在书中,它可能会增加2。) 为什么getppid()返回的值保持不变 >cat getpid.c int main() { printf(“pid:%d\n”,getpid()); printf(“ppid:%d\n”,getppid()); 出口(0); } >g++getpid.c >/a.out pid:9411 ppid:6469 >/

我正在研究UNIX环境中的高级编程第3版,第1章中的问题1

在OS X 10.10.5下,为什么每次执行进程时,
getpid()
返回的值都会增加5或6?(在书中,它可能会增加2。)

为什么
getppid()
返回的值保持不变

>cat getpid.c
int main()
{
printf(“pid:%d\n”,getpid());
printf(“ppid:%d\n”,getppid());
出口(0);
}
>g++getpid.c
>/a.out
pid:9411
ppid:6469
>/a.out
pid:9416
ppid:6469
>/a.out
pid:9421
ppid:6469
>

操作系统根据需要分配PID。对于您的流程可能得到的PID没有任何保证,除了它在任何给定时间点都是唯一的。这就是
getpid
提供给您的


在运行程序时,程序的父进程是您正在使用的当前shell。因为每次都是相同的过程,所以它总是具有相同的PID。这是操作系统根据需要分配PID的值。对于您的流程可能得到的PID没有任何保证,除了它在任何给定时间点都是唯一的。这就是
getpid
提供给您的


在运行程序时,程序的父进程是您正在使用的当前shell。因为每次都是相同的过程,所以它总是具有相同的PID。这是由
getppid
编辑的
return

getppid
返回父进程id,即正在运行的shell的进程id。由于您一直从相同的父进程启动.out,它将继续返回相同的进程id。这有意义吗?打开另一个终端窗口,运行a。该终端窗口上的getppid将不同


getpid
返回a.out运行实例的进程id。每个进程id都是唯一的,但在任何标准中都没有规定这些数字必须是递增的或以可预测的方式分配的。

gettppid
返回父进程id,即正在运行的shell的进程id。由于您一直从相同的父进程启动.out,它将继续返回相同的进程id。这有意义吗?打开另一个终端窗口,运行a。该终端窗口上的getppid将不同


getpid
返回a.out运行实例的进程id。每个进程id都是唯一的,但在任何标准中都没有规定这些编号必须是递增的或以可预测的方式分配。

系统上可能还有其他进程正在创建进程并使用这些PID。或者,它可能是一种安全措施的一部分,以阻止“病毒”猜测即将到来的PID。您的
PS1
提示有多复杂?它运行命令吗?如果是这样,那就可以解释额外的过程了。我有一个常量字符串作为我的
PS1
提示符,我得到了大部分连续的PID值(在Mac OS X El Capitan 10.11.1上运行,但这是自Jaguar 10.2以来我在Mac OS X上看到的行为)。如果代码显示必要的标题(代码> >包含< <代码> >代码>包含代码>和代码>包含< <代码> >,则C++代码编译器将允许您编译您用“<代码> CAT < /COD>输出”所显示的内容。系统上可能还有其他进程正在创建进程并使用这些PID。或者,它可能是一种安全措施的一部分,以阻止“病毒”猜测即将到来的PID。您的
PS1
提示有多复杂?它运行命令吗?如果是这样,那就可以解释额外的过程了。我有一个常量字符串作为我的
PS1
提示符,我得到了大部分连续的PID值(在Mac OS X El Capitan 10.11.1上运行,但这是自Jaguar 10.2以来我在Mac OS X上看到的行为)。如果代码显示了必要的标题(代码> >包含< <代码> >代码>包含代码>和代码>包含< <代码> >,则没有任何C++编译器允许你编译你用“<代码> CAT/COM>输出”所显示的内容。这是否意味着它会增加5或6,因为它看起来是一种常规行为,lol.在您的操作系统中,可能有一些实现原因使得这种行为最有可能发生。但这肯定不是你可以依赖的。这是否意味着它恰好增加了5或6,因为这似乎是一种常规行为,哈哈。在你的操作系统中,可能有实现原因使这种行为最有可能发生。但这肯定不是你可以依赖的。