1. 程式人生 > >liunx進程管理之進程介紹

liunx進程管理之進程介紹

不同 ssh system 自然 非交互 過程 提示 可執行 交互

關於進程 process

====================================================================================
What is a process? 什麽是進程
Process life cycle 進程的生命周期
Process states 進程狀態

什麽是進程?
進程是已啟動的可執行程序的運行實例,進程有以下組成部分:
• 已分配內存的地址空間;
• 安全屬性,包括所有權憑據和特權;
• 程序代碼的一個或多個執行線程;
• 進程狀態。
程序: 二進制文件,靜態 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/ngix

進程: 是程序運行的過程, 動態,有生命周期及運行狀態。

程序和進程的區別


• 程序是靜態的,它只是一組指令的集合,不具有任何的運行意義。而進程是程序運行的動態過程
• 進程和程序並不是一一對應的關系,相同的程序運行在不同的數據集上就是不同的進程
• 進程還具有並發性和交往性,而程序卻是封閉的

進程和線程的區別


• 一個進程可以擁有多個線程,而一個線程同時只能被一個進程所擁有
• 線程不能單獨執行,但是每一個線程都有程序的入口、執行序列以及程序出口,它必須組成進程才能被執行

進程的生命周期

父進程復制自己的地址空間(fork)創建一個新的(子)進程結構。每個新進程分配一個唯一的進程 ID (PID),滿足跟蹤安全性之需。PID 和 父進程 ID (PPID)是子進程環境的元素,任何進程都可以創建子進程,所有進程都是第一個系統進程的後代:

Centos5/6: init
Centos7: systemd

父子進程的關系
子進程是由一個進程所產生的進程,產生這個子進程的進程稱為父進程
在linux系統中,使用系統調用fork創建進程。fork復制的內容包括父進程的數據和堆棧段以及父進程的進程環境。
父進程終止子進程自然終止。


子進程繼承父進程的安全性身份、過去和當前的文件描述符、端口和資源特權、環境變量,以及程序代碼。隨後,子進程可能exec自己的程序代碼。通常,父進程在子進程運行期間處於睡眠(sleeping)狀態。當子進程完成時發出(exit)信號請求,在退出時,子進程已經關閉或丟棄了其資源環境,剩余的部分稱之為僵停(僵屍Zombie)。父進程在子進程退出時收到信號而被喚醒,清理剩余的結構,然後繼續執行其自己的程序代碼。

前臺進程和後臺進程
前臺進程:在 shell 提示處理打入命令後,創建一個子進程,運行命令, Shell 等待命令退出,然後返回到對用戶給出提示符。這條命令與 Shell 異步運行,即在前臺運行,用戶在它完成之前不能執行別一個命令 。
後臺進程:在 Shell 提示處打入命令,若後隨一個 &, Shell 創建子進程運行此命令,但不等待命令退出,而直接返回到對用戶給出提示。這條命令與 Shell 同步運行,即在後臺運行。“後臺進程必須是非交互式的” 。




進程狀態
在多任務處理操作系統中,每個CPU(或核心)在一個時間點上只能處理一個進程。在進程運行時,它對CPU 時間和資源分配的要求
會不斷變化,從而為進程分配一個狀態,它隨著環境要求而改變。

liunx進程管理之進程介紹