[英]Why is argv[1][0] not '?' for 'a.out ?' executed in a bash shell
[英]getpid() incremented by 5 or 6 every time a.out is executed
我正在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());
exit(0);
}
> g++ getpid.c
> ./a.out
pid: 9411
ppid: 6469
> ./a.out
pid: 9416
ppid: 6469
> ./a.out
pid: 9421
ppid: 6469
>
gettppid
返回父進程gettppid
這是您正在其下運行的Shell的進程ID。 由於您一直從同一父進程啟動a.out,因此它將繼續返回相同的進程ID。 那有意義嗎? 去打開另一個終端窗口並運行a.out。 該終端窗口上的getppid將有所不同。
getpid
返回正在運行的a.out實例的進程ID。 每個進程ID都是唯一的,但是沒有任何標准表明這些數字必須是遞增的或以可預測的方式分配的。
操作系統會根據需要分配PID。 除了在任何給定時間點唯一的過程外,無法保證您的過程可以得到什么PID。 這就是getpid
給您的。
程序的父進程(在運行時)是您正在使用的當前Shell。由於每次都是相同的進程,因此它始終具有相同的PID。 這是getppid
return
的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.