簡體   English   中英

每次執行a.out時,getpid()都會增加5或6

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM