中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux進程怎么創建和啟動

發布時間:2022-02-18 09:25:25 來源:億速云 閱讀:573 作者:iii 欄目:開發技術

本篇內容主要講解“Linux進程怎么創建和啟動”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Linux進程怎么創建和啟動”吧!

進程的類型

在 Linux 中主要有兩種類型的進程:

前臺進程(也稱為交互式進程) - 這些進程由終端會話初始化和控制。換句話說,需要有一個連接到系統中的用戶來啟動這樣的進程;它們不是作為系統功能/服務的一部分自動啟動。
后臺進程(也稱為非交互式/自動進程) - 這些進程沒有連接到終端;它們不需要任何用戶輸入。

什么是守護進程daemon

這是后臺進程的特殊類型,它們在系統啟動時啟動,并作為服務一直運行;它們不會死亡。它們自發地作為系統任務啟動(作為服務運行)。但是,它們能被用戶通過 init 進程控制(RHEL&CentOs7 后systemd替換了init 進程具體可參看Linux就該這樣學相關內容)。

  Linux進程怎么創建和啟動

在 Linux 中創建進程

在 Linux 中創建進程有三種方式:

fork() 方式

使用 fork() 函數以父進程為藍本復制一個進程,其 PID號與父進程 PID 號不同。在 Linux 環境下,fork() 是以寫復制實現的,新的子進程的環境和父進程一樣,只有內存與父進程不同,其他與父進程共享,只有在父進程或者子進程進行了修改后,才重新生成一份。

system() 方式

system() 函數會調用 /bin/sh –c command 來執行特定的命令,并且阻塞當前進程的執行,直到 command 命令執行完畢。新的子進程會有新的 PID。

exec() 方式

exec() 方式有若干種不同的函數,與之前的 fork() 和 system() 函數不同,exec() 方式會用新進程代替原有的進程,系統會從新的進程運行,新的進程的 PID 值會與原來的進程的 PID 值相同。

Linux 如何識別進程?

由于 Linux 是一個多用戶系統,意味著不同的用戶可以在系統上運行各種各樣的程序,內核必須唯一標識程序運行的每個實例。

程序由它的進程 ID(PID)和它父進程的進程 ID(PPID)識別,因此進程可以被分類為:

父進程 - 這些是在運行時創建其它進程的進程。
子進程 - 這些是在運行時由其它進程創建的進程。

init 進程

init 進程是系統中所有進程的父進程,它是啟動 Linux 系統后第一個運行的程序;它管理著系統上的所有其它進程。它由內核自身啟動,因此理論上說它沒有父進程。

init 進程的進程 ID 總是為 1。它是所有子進程的父進程。(和根目錄和子目錄關系類似,一切從跟開始,一切從init進程開始)。

查找進程 ID

你可以用 pidof 命令查找某個進程的進程 ID:

# pidof systemd# pidof top# pidof httpd
Linux進程怎么創建和啟動

要查找當前 shell 的進程 ID 以及它父進程的進程 ID,可以運行:

$ echo $$
$ echo $PPID
Linux進程怎么創建和啟動

在 Linux 中啟動進程

每次你運行一個命令或程序(例如 cloudcmd – CloudCommander),它就會在系統中啟動一個進程。你可以按照下面的方式啟動一個前臺(交互式)進程,它會被連接到終端,用戶可以發送輸入給它:

# cloudcmd
Linux進程怎么創建和啟動

Linux 后臺任務

要在后臺(非交互式)啟動一個進程,使用 & 符號,此時,該進程不會從用戶中讀取輸入,直到它被移到前臺。

# cloudcmd &# jobs
Linux進程怎么創建和啟動

你也可以使用 Ctrl + Z 暫停執行一個程序并把它發送到后臺,它會給進程發送 SIGSTOP 信號,從而暫停它的執行;它就會變為空閑:

# tar -cf backup.tar /backups/*  ### 按下 Ctrl+Z# jobs

要在后臺繼續運行上面被暫停的命令,使用 bg 命令:

# bg

要把后臺進程發送到前臺,使用 fg 命令以及任務的 ID,類似:

# jobs# fg %1
Linux進程怎么創建和啟動

Linux 中進程的狀態

在執行過程中,取決于它的環境一個進程會從一個狀態轉變到另一個狀態。在 Linux 中,一個進程有下面的可能狀態:

Running - 此時它正在運行(它是系統中的當前進程)或準備運行(它正在等待分配 CPU 單元)。Waiting - 在這個狀態,進程正在等待某個事件的發生或者系統資源。另外,內核也會區分兩種不同類型的等待進程;可中斷等待進程interruptible waiting processes - 可以被信號中斷,以及不可中斷等待進程uninterruptible waiting processes- 正在等待硬件條件,不能被任何事件/信號中斷。Stopped - 在這個狀態,進程已經被停止了,通常是由于收到了一個信號。例如,正在被調試的進程。Zombie - 該進程已經死亡,它已經停止了但是進程表process table中仍然有它的條目。

如何在 Linux 中查看活躍進程

有很多 Linux 工具可以用于查看/列出系統中正在運行的進程,兩個傳統眾所周知的是 ps 和 top 命令:

1. ps 命令

它顯示被選中的系統中活躍進程的信息,如下圖所示:

# ps# ps -e | head
Linux進程怎么創建和啟動

2. top – 系統監控工具

top 是一個強大的工具,它能給你提供 運行系統的動態實時視圖,如下面截圖所示:

# top
Linux進程怎么創建和啟動

3. glances – 系統監控工具

glances 是一個相對比較新的系統監控工具,它有一些比較高級的功能:

# glances
Linux進程怎么創建和啟動

如何在 Linux 中控制進程

Linux 也有一些命令用于控制進程,例如 kill、pkill、pgrep 和 killall,下面是一些如何使用它們的基本事例:

$ pgrep -u tecmint top

$ kill 2308

$ pgrep -u tecmint top

$ pgrep -u tecmint glances

$ pkill glances

$ pgrep -u tecmint glances
Linux進程怎么創建和啟動

給進程發送信號

Linux 中控制進程的基本方法是給它們發送信號。你可以發送很多信號給一個進程,運行下面的命令可以查看所有信號:

$ kill -l
Linux進程怎么創建和啟動

要給一個進程發送信號,可以使用我們之前提到的 kill、pkill 或 pgrep 命令。但只有被編程為能識別這些信號時程序才能響應這些信號。

大部分信號都是系統內部使用,或者給程序員編寫代碼時使用。下面是一些對系統用戶非常有用的信號:

SIGHUP 1 - 當控制它的終端被被關閉時給進程發送該信號。

SIGINT 2 - 當用戶使用 Ctrl+C 中斷進程時控制它的終端給進程發送這個信號。

SIGQUIT 3 - 當用戶發送退出信號 Ctrl+D 時給進程發送該信號。

SIGKILL 9 - 這個信號會馬上中斷(殺死)進程,進程不會進行清理操作。

SIGTERM 15 - 這是一個程序終止信號(kill 默認發送這個信號)。

SIGTSTP 20 - 它的控制終端發送這個信號給進程要求它停止(終端停止);通過用戶按 Ctrl+Z 觸發。

下面是當 Firefox 應用程序僵死時通過它的 PID 殺死它的 kill 命令事例:

$ pidof firefox
$ kill 9 2687
或
$ kill -KILL 2687
或
$ kill -SIGKILL 2687

使用它的名稱殺死應用,可以像下面這樣使用 pkill 或 killall:

$ pkill firefox

$ killall firefox

更改 Linux 進程優先級

在 Linux 系統中,所有活躍進程都有一個優先級以及 nice 值。有比點優先級進程有更高優先級的進程一般會獲得更多的 CPU 時間。

但是,有 root 權限的系統用戶可以使用 nice 和 renice 命令影響(更改)優先級。

在 top 命令的輸出中, NI 顯示了進程的 nice 值:

$ top
Linux進程怎么創建和啟動

使用 nice 命令為一個進程設置 nice 值。記住一個普通用戶可以給他擁有的進程設置 0 到 20 的 nice 值。

只有 root 用戶可以使用負的 nice 值。

要重新設置一個進程的優先級,像下面這樣使用 renice 命令:

$ renice +8  2687

$ renice +8  2103

到此,相信大家對“Linux進程怎么創建和啟動”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新丰县| 土默特右旗| 承德县| 和田县| 正镶白旗| 广平县| 扎兰屯市| 青河县| 通江县| 宁德市| 琼结县| 东兰县| 海兴县| 铜鼓县| 陇川县| 朝阳市| 益阳市| 古浪县| 南通市| 八宿县| 腾冲县| 且末县| 呼和浩特市| 宿松县| 达孜县| 龙山县| 特克斯县| 金秀| 广安市| 沂水县| 云龙县| 卢氏县| 顺昌县| 杭锦后旗| 华亭县| 定边县| 加查县| 公安县| 长海县| 钟祥市| 行唐县|