1. 程式人生 > >程序學習——父程序子程序ID

程序學習——父程序子程序ID

今天在測試共享記憶體時編寫了一個程序測試的程式碼,在呼叫fork函式建立子程序時,在父程序中返回子程序pid,在子程序中返回0;具體程式碼如下:
#include <unistd.h>
#include <stdio.h>

int main()
{
    pid_t pid;
    pid = fork();

    //父程序
    if(pid != 0)
    {
        printf("this is father, child pid = %d\n", pid);
    }

    //子程序
    if(pid == 0)
    {
        printf
("this is child, father pid = %d\n", getppid()); } }

在執行這段程式時出現了下面的結果:
[email protected]:~/study-linux/unix_c/12-mem_share./testthisisfather,childpid=3680thisischild,fatherpid=3679hello@hellomachine:/studylinux/unixc/12memshare ./test
this is father, child pid = 3682
this is child, father pid = 1

[email protected]:~/study-linux/unix_c/12-mem_share$ ./test
this is father, child pid = 3685
this is child, father pid = 3684

在第二個執行結果中出現了子程序的父程序pid為1的情況,這是因為在fork之後是父程序先執行還是子程序先執行是不確定的,在這個程式碼中父程序和子程序的內容都是十分簡單的;在子程序正常終止時,會將其終止狀態返回給父程序,如果父程序在子程序之前終止,則會進行這樣的處理呢?對於父程序已經終止的所有程序,它們的父程序都改變為init程序,稱這些程序有init程序領養。具體過程為:在一個程序終止時,核心逐個檢查所有活動程序,判斷它是否是要終止程序的子程序,如果是,則將該程序的父程序ID更改為1(init程序的ID)。這種處理方法保證了每個程序都有一個父程序。
在本文的程式碼中當父程序先執行結束時,子程序就被init程序領取,這樣它的父程序pid就為1。

相關推薦

程序學習——程序程序ID

今天在測試共享記憶體時編寫了一個程序測試的程式碼,在呼叫fork函式建立子程序時,在父程序中返回子程序pid,在子程序中返回0;具體程式碼如下: #include <unistd.h> #include <stdio.h> int

程序退出之後,程序會發生什麼?

在linux中,所有程序都有一個共同的父程序systemd,如果父程序退出了,子程序還沒執行結束,子程序會被stsremd收養 下面用一個小程式來驗證一下: #include <cstdio> #include <sys/types.h> #inc

程序結束,其程序不會結束,會掛到init程序下 孤兒程序與殭屍程序[總結]

結論:一個父程序產生子程序,父程序結束(kill),子程序不會結束,子程序被init程序託管 下面是過程:     d.sh指令碼是一個ping命令,執行d.sh             &nb

在 linux中如何結束由一個程序產生的所有程序

採用ps + grep + awk + pkill命令組合,可實現“結束由一個父程序產生的所有子程序”,如:父程序名為 parent_proc,可先根據程序名稱,得到程序PID1ps -ef |grep parent_proc|egrep -v grep | awk '{pr

linux 程序的管理、程序建立、程序資源的回收

今天介紹程序的程序的管理,子程序建立以及程序資源的回收 首先什麼是程序? 答:程序是程式的例項。程式是靜態的,是存放在硬碟上的,程式執行起來就形成了程序。程式從磁碟到記憶體裡之後就形成了程序。 程序又分為:使用者級程序和核心級程序   我們下面瞭解使用者級程序: 作業系統為

WIN通過程序獲取程序ID

// ParentPid.cpp : Defines the entry point for the console application. // 對著你的專案點選右鍵,依次選擇:屬性、配置屬性、常規,然後右邊有個“專案預設值”,下面有個2個MFC的使用選項 #incl

fork -- 程序共享程序開啟的檔案描述符

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #define FILE_PATH "file_point" int main(int a

linux程序程序的關係

子程序繼承父程序 使用者號UIDs和使用者組號GIDs 環境Environment 堆疊 共享記憶體 開啟檔案的描述符 執行時關閉(Close-on-exec)標誌 訊號(Signal)控制設定 程序組號 當前工作目錄 根目錄

程式中建立一個子程序,然後父子程序各自獨自執行,程序在標準輸入裝置上讀入小寫字母,寫入管道。程序從管道讀取字元並轉化為大寫字母。讀到x結束

程式中建立一個子程序,然後父子程序各自獨自執行,父程序在標準輸入裝置上讀入小寫字母,寫入管道。子程序從管道讀取字元並轉化為大寫字母。讀到x結束。(非字母字元就輸出本身) 相關的系統函式:fork(),read(),write(),pipe(); 筆者在telnet上寫這些程式碼,由於

作業系統(程序間共享儲存區的通訊):建立一個共享儲存區,大小4個位元組(int大小)。建立一個子程序,然後子父程序獨自執行。父程序寫入一個數字到共享儲存區,子程序在共享儲存區把該數字讀出

題目:建立一個共享儲存區,大小4個位元組(int大小)。建立一個子程序,然後子父程序獨自執行。父程序寫入一個數字到共享儲存區,子程序在共享儲存區把該數字讀出。 程式碼量很少,純屬應付作業 筆者在telnet上寫這些程式碼,由於知識技術及英語太菜,不知道怎樣在telnet上覆製出來這些程式碼,

python學習之-subprocess模組(程序模組)

什麼是程序 一個程式執行起來了就是一個程序 但是程式本身不是程序,程式是一對程式碼而已 所以程序就是一個抽象的概念,就是程式執行起來的一個過程 程序和程序之間是相互獨立的,互不影響 如何理解子程序和父程序 抽象的說一個QQ程式是一個父程序,word就是一個子程序,兩個互不干預,當然這只是一個比喻

Python 程序,多程序,獲取程序id,給程序傳遞引數

  執行緒與執行緒之間共享全域性變數,程序之間不能共享全域性變數。 程序與程序相互獨立  (可以通過socket套接字實現程序間通訊,可以通過硬碟(檔案)實現程序通訊,也可以通過佇列(Queue)實現程序通訊) 子程序會拷貝複製主程序中的所有資源(變數、函式定義等),所以

fork之後程序到底複製了程序什麼

原文地址:http://blog.csdn.net/xy010902100449/article/details/44851453 #include<stdio.h>   #include<string.h>   #include&l

程序異常退出時, 殺死所以程序

#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <stdli

Nginx學習之路(四)NginX的程序主迴圈

//呼叫傳入的回撥函式,子程序的正式主迴圈開始,回撥函式的實體是ngx_worker_process_cycle proc(cycle, data); 今天就來介紹一下這個proc的具體過程:首先,proc函式是一個隨ngx_spawn_process(

作業系統-關於fork&程序&程序

前言 這學期在學作業系統,目前感覺還是挺有意思的。 作業系統老師:“鼓勵你們大開腦洞多試試,會有各種奇異的結果,但是最後居然都能解釋出來。” 本文是根據課上講解+自行實踐寫的。 測試環境:Ubuntu 正文 關於fork()的3種返回值

Python學習筆記13:標準庫之程序(subprocess包)

ubprocess包主要功能是執行外部的命令和程式。從這個意義上來說,subprocess的功能與shell類似。 subprocess以及常用的封裝函式 當我們執行python的時候,我們都是在建立並執行一個程序。 在Python中,我們通過標準庫中的subprocess

python 開啟程序的兩種方法、以及查詢程序程序

方法1 先輸出主程序,再輸出子程序是因為 p.start() 只是給系統傳送就緒訊號有延時,所以主程序都執行完了,可能子程序才到他開始執行 from multiprocessing import Process # 建立程序的模組 def

Linux 下程序程序的通訊(pipe管道)

每個程序各自有不同的使用者地址空間,任 何一個程序的全域性變數在另一個程序中都看不到,所以程序之間要交換資料必須通過核心,在核心中開闢一塊緩衝 區,程序1把資料從使用者空間拷到核心緩衝區,程序2再從核心緩衝區把資料讀走,核心提供的這種機制稱為程序間通訊(IPC,Inte

程序關閉從程序繼承來的檔案描述符

前一陣子遇到了這麼一個問題,父程序建立了子程序,然後父程序退出。 子程序第一件事解除安裝sdcard,結果提示裝置資源忙。在子程序中使用fuser命令查 看sdcard掛載目錄,結果發現子程序的確佔用了該目錄, 馬上就明白了是子程序繼承了父 程序的檔案描述符。同時我聯想到一