程序學習——父程序子程序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
this is father, child pid = 3682
this is child, father pid = 1
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掛載目錄,結果發現子程序的確佔用了該目錄, 馬上就明白了是子程序繼承了父 程序的檔案描述符。同時我聯想到一