Linux啟動與程序:前臺程序和後臺程序
作業系統中,前臺程序和後臺程序有什麼區別?特徵是什麼?
後臺程式基本上不和使用者互動,優先級別稍微低一點 前臺的程式和使用者互動,需要較高的響應速度,優先級別稍微高一點
直接從後臺手工啟動一個程序用得比較少一些,除非是該程序甚為耗時,且使用者也不急著需要結果的時候。假設使用者要啟動一個需要長時間執行的格式化文字檔案的程序。為了不使整個shell在格式化過程中都處於“癱瘓”狀態,從後臺啟動這個程序是明智的選擇。
LINUX後臺程序與前臺程序的區別
LINUX後臺程序也叫守護程序(Daemon),是執行在後臺的一種特殊程序。它獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。
一般用作系統服務,可以用crontab提交,編輯或者刪除相應得作業。
守護的意思就是不受終端控制。Linux的大多數伺服器就是用守護程序實現的。比如,Internet伺服器inetd,Web伺服器httpd等。同時,守護程序完成許多系統任務。比如,作業規劃程序crond,列印程序lpd等。
前臺程序就是使用者使用的有控制終端的程序
shell下,程序的前臺與後臺執行
跟系統任務相關的幾個命令:fg、bg、jobs、&、ctrl+z
1. & 最經常被用到
這個用在一個命令的最後,可以把這個命令放到後臺執行
2. ctrl + z
可以將一個正在前臺執行的命令放到後臺,並且暫停
3. jobs
檢視當前有多少在後臺執行的命令
4. fg
將後臺中的命令調至前臺繼續執行
如果後臺中有多個命令,可以用 fg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的後臺正在執行的命令的序號(不是pid)
5. bg 將一個在後臺暫停的命令,變成繼續執行
如果後臺中有多個命令,可以用bg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的後臺正在執行的命令的序號(不是pid)
1. jobs列舉出後臺作業資訊。([作業號] 執行狀態 作業名稱)
2. ctrl+z 將任務放到後臺去,並暫停;
3. bg <%int> 將後臺任務喚醒,在後臺執行;
4. fg <%int> 將後任務的程式放到前臺;
1. ctrl+z 將任務放到後臺去,並暫停.
主程序waitpid(pid,&status,WUNTRACED)時,子程序
退出時,父程序被喚醒
2. 將後臺任務喚醒,在後臺執行;
kill(pid,SIGCONT);
3. 將後臺執行的程式放到前臺;
kill(pid,SIGCONT);
waitpid(pid,&status,WUNTRACED);
//可見,後臺執行與前臺執行的區別只在於前臺執行等待子程序的退出而阻塞父程序操作。而後臺執行時,可以在父程序中輸入命令繼續其他操作。本質上沒有區別,都是給子程序傳送SIGCONT訊號。
Configure 引數選項
1 –prefix=<path> - Nginx安裝路徑。如果沒有指定,預設為 /usr/local/nginx。
--help 檢視幫助文件
Linux 自啟動程式
下面用自啟動apache為例: 有兩種方法可以讓Apache在系統啟動時自動啟動 1. 在/etc/rc.d/rc.local中增加啟動apache的命令,例如:/usr/local/httpd/bin/apachectl start 2. 將apache註冊為系統服務 首先將apachectl命令拷貝至/etc/rc.d/init.d目錄下,改名為httpd 使用編輯器開啟httpd檔案,並在第一行#!/bin/sh下增加兩行文字如下 # chkconfig: 35 70 30 # description: Apache 接著註冊該服務 chkconfig –add httpd 一切OK了,啟動服務 service httpd start 其中所增加的第二行中三個數字第一個表示在執行級別3和5下啟動apache,第二、三是關於啟動和停止的優先順序配置,無關緊要。在Red Hat Linux中自動執行程式 1.開機啟動時自動執行程式 Linux載入後, 它將初始化硬體和裝置驅動, 然後執行第一個程序init。init根據配置檔案繼續引導過程,啟動其它程序。通常情況下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目錄下的指令碼檔案,可以使init自動啟動其它程式。例如:編輯 /etc/rc.d/rc.local 檔案,在檔案最末加上一行”xinit”或”startx”,可以在開機啟動後直接進入X-Window。
2.登入時自動執行程式 使用者登入時,bash首先自動執行系統管理員建立的全域性登入script :/etc/profile。然後bash在使用者起始目錄下按順序查詢三個特殊檔案中的一個:/.bash_profile、/.bash_login、 /.profile,但只執行最先找到的一個。 因此,只需根據實際需要在上述檔案中加入命令就可以實現使用者登入時自動執行某些程式
3.退出登入時自動執行程式 退出登入時,bash自動執行個人的退出登入指令碼/.bash_logout。例如,在/.bash_logout中加入命令”tar -cvzf c.source.tgz *.c”,則在每次退出登入時自動執行 “tar” 命令備份 *.c 檔案。
4.定期自動執行程式 Linux有一個稱為crond的守護程式,主要功能是週期性地檢查 /var/spool/cron目錄下的一組命令檔案的內容,並在設定的時間執行這些檔案中的命令。使用者可以通過crontab 命令來建立、修改、刪除這些命令檔案。 例如,建立檔案crondFile,內容為”00 9 23 Jan * HappyBirthday”,執行”crontab cronFile”命令後,每當元月23日上午9:00系統自動執行”HappyBirthday”的程式(”*”表示不管當天是星期幾)。Linux啟動細節:
1)redhat的啟動方式和執行次序是: 載入核心 執行init程式 /etc/rc.d/rc.sysinit # 由init執行的第一個指令碼 /etc/rc.d/rc $RUNLEVEL # $RUNLEVEL為預設的執行模式 /etc/rc.d/rc.local #相應級別服務啟動之後、在執行該檔案(其實也可以把需要執行的命令寫到該檔案中) /sbin/mingetty # 等待使用者登入
在Redhat中,/etc/rc.d/rc.sysinit主要做在各個執行模式中相同的初始化工作,包括: 調入keymap以及系統字型 啟動swapping 設定主機名 設定NIS域名 檢查(fsck)並mount檔案系統 開啟quota 裝載音效卡模組 設定系統時鐘 /etc/rc.d/rc則根據其引數指定的執行模式(執行級別,你在inittab檔案中可以設定)來執行相應目錄下的指令碼。凡是以Kxx開頭的,都以stop為引數來呼叫;凡是以Sxx開頭的,都以start為引數來呼叫。呼叫的順序按xx從小到大來執行。(其中xx是數字、表示的是啟動順序)例如,假設預設的執行模式是3,/etc/rc.d/rc就會按上述方式呼叫/etc/rc.d/rc3.d/下的指令碼。 值得一提的是,Redhat中的執行模式2、3、5都把/etc/rc.d/rc.local做為初始化指令碼中 的最後一個,所以使用者可以自己在這個檔案中新增一些需要在其他初始化工作之後,登入之前執行的命令。 init在等待/etc/rc.d/rc執行完畢之後(因為在/etc/inittab中/etc/rc.d/rc的action是wait),將在指定的各個虛擬終端上運/sbin/mingetty,等待使用者的登入。 至此,LINUX的啟動結束。)init執行級別及指令 一、什麼是INIT: init是Linux系統操作中不可缺少的程式之一。 所謂的init程序,它是一個由核心啟動的使用者級程序。 核心自行啟動(已經被載入記憶體,開始執行,並已初始化所有的裝置驅動程式和資料結構等)之後,就通過啟動一個使用者級程式init的方式,完成引導程序。所以,init始終是第一個程序(其程序編號始終為1)。 核心會在過去曾使用過init的幾個地方查詢它,它的正確位置(對Linux系統來說)是/sbin/init。如果核心找不到init,它就會試著執行/bin/sh,如果執行失敗,系統的啟動也會失敗。 二、執行級別 那麼,到底什麼是執行級呢? 簡單的說,執行級就是作業系統當前正在執行的功能級別。這個級別從1到6 ,具有不同的功能。 不同的執行級定義如下 # 0 – 停機(千萬不能把initdefault 設定為0 ) # 1 – 單使用者模式 # s init s = init 1 # 2 – 多使用者,沒有 NFS # 3 – 完全多使用者模式(標準的執行級) # 4 – 沒有用到 # 5 – X11 多使用者圖形模式(xwindow) # 6 – 重新啟動 (千萬不要把initdefault 設定為6 ) 這些級別在/etc/inittab 檔案裡指定。這個檔案是init 程式尋找的主要檔案,最先執行的服務是放在/etc/rc.d 目錄下的檔案。在大多數的Linux 發行版本中,啟動指令碼都是位於 /etc/rc.d/init.d中的。這些指令碼被用ln 命令連線到 /etc/rc.d/rcn.d 目錄。(這裡的n 就是執行級0-6)3):chkconfig 命令(redhat 作業系統下) 不像DOS 或者 Windows,Linux 可以有多種執行級。常見的就是多使用者的2,3,4,5 ,很多人知道 5 是執行 X-Windows 的級別,而 0 就是關機了。執行級的改變可以通過 init 命令來切換。例如,假設你要維護系統進入單使用者狀態,那麼,可以使用 init 1 來切換。在 Linux 的執行級的切換過程中,系統會自動尋找對應執行級的目錄/etc/rc[0-6].d下的K 和 S 開頭的檔案,按後面的數字順序,執行這些指令碼。對這些指令碼的維護,是很繁瑣的一件事情,Linux 提供了chkconfig 命令用來更新和查詢不同執行級上的系統服務。 語法為: chkconfig –list [name] chkconfig –add name chkconfig –del name chkconfig [--level levels] name chkconfig [--level levels] name chkconfig 有五項功能:新增服務,刪除服務,列表服務,改變啟動資訊以及檢查特定服務的啟動狀態。 chkconfig 沒有引數執行時,顯示用法。如果加上服務名,那麼就檢查這個服務是否在當前執行級啟動。如果是,返回 true,否則返回false。 –level 選項可以指定要檢視的執行級而不一定是當前執行級。 如果在服務名後面指定了on,off 或者 reset,那麼 chkconfig 會改變指定服務的啟動資訊。on 和 off 分別指服務在改變執行級時的啟動和停止。reset 指初始化服務資訊,無論有問題的初始化指令碼指定了什麼。 對於 on 和 off 開關,系統預設只對執行級 3,4, 5有效,但是 reset 可以對所有執行級有效。指定 –level 選項時,可以選擇特定的執行級。 需要說明的是,對於每個執行級,只能有一個啟動指令碼或者停止指令碼。當切換執行級時,init 不會重新啟動已經啟動的服務,也不會再次去停止已經停止的服務。 選項介紹: –level levels 指定執行級,由數字 0 到 7 構成的字串,如: –level 35 表示指定執行級3 和5。 要在執行級別3、4、5中停運 nfs 服務,使用下面的命令:chkconfig –level 345 nfs off –add name 這個選項增加一項新的服務,chkconfig 確保每個執行級有一項 啟動(S) 或者 殺死(K) 入口。如有缺少,則會從預設的init 指令碼自動建立。 –del name 用來刪除服務,並把相關符號連線從 /etc/rc[0-6].d 刪除。 –list name 列表,如果指定了name 那麼只是顯示指定的服務名,否則,列出全部服務在不同執行級的狀態。 執行級檔案 每個被chkconfig 管理的服務需要在對應的init.d 下的指令碼加上兩行或者更多行的註釋。 第一行告訴 chkconfig 預設啟動的執行級以及啟動和停止的優先順序。如果某服務預設不在任何執行級啟動,那麼使用 – 代替執行級。 第二行對服務進行描述,可以用 跨行註釋。 例如,random.init 包含三行: # chkconfig: 2345 20 80 # description: Saves and restores system entropy pool for # higher quality random number generation. 表明 random 指令碼應該在執行級 2, 3, 4, 5 啟動,啟動優先權為20,停止優先權為 80。 好了,介紹就到這裡了,去看看自己目錄下的/etc/rc.d/init.d 下的指令碼吧。 2. 例項介紹: 1、在linux下安裝了apache 服務(通過下載二進位制檔案經濟編譯安裝、而非rpm包)、apache 服務啟動命令: /server/apache/bin/apachectl start 。讓apache服務執行在執行級別3下面。 命令如下: 1)touch /etc/rc.d/init.d/apache vi /etc/rc.d/init.d/apache chown -R root /etc/rc.d/init.d/apache chmod 700 /etc/rc.d/init.d/apache ln -s /etc/rc.d/init.d/apache /etc/rc.d/rc3.d/S60apache #S 是start的簡寫、代表啟動、K是kill的簡寫、代表關閉。60數字代表啟動的順序。 apache的內容: #!/bin/bash #Start httpd service /server/apache/bin/apachectl start 至此 apache服務就可以在執行級別3下 隨機自動啟動了。(可以結合chkconfig 對啟動服務進行相應的調整)
相關推薦
Linux啟動與程序:前臺程序和後臺程序
作業系統中,前臺程序和後臺程序有什麼區別?特徵是什麼? 後臺程式基本上不和使用者互動,優先級別稍微低一點 前臺的程式和使用者互動,需要較高的響應速度,優先級別稍微高一點 直接從後臺手工啟動一個程序用得比較少一些,除非是該程序甚為耗時,且使用者也不急著需要結果的時候。假
微信小程序:其中wxml和wxss的樣式說明
spl pix 功能 微信開發 式表 border The png wechat 微信小程序:其中wxml和wxss的樣式說明 一、簡介 對於css不熟悉的Android程序員來說,開發微信小程序面臨的一個比較困難的問題就是界面的排版了。微信小程序的排版就跟wxml和wxs
[Xcode10 實際操作]九、實用進階-(8)實現App的Setting設置:添加和讀取程序的配置信息
ren dtd www user capital 配置 演示 應用 default 本文將演示如何實現添加和讀取程序的配置信息。 在項目文件夾【DemoApp】上點擊鼠標右鍵->【New File】創建一個設置束文件 ->【Settings Bundle】設
【Linux】GDB除錯多執行緒和多程序以及Core檔案
GDB偵錯程式 基本概念 GDB是GNU開源組織釋出的一個強大的UNIX下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像VC、BCB等IDE的除錯,但如果你是在UNIX平臺下做軟體,你會發現
微信小程序:分頁和加載更多
play tro else if api top 交互 more Language else 直接上代碼吧。不足之處,多多指教,一起進步 1.wxml頁面的最後敲上,css自己定義 <view class="loadmore" mtype="{{mtype}}"
Linux數據庫:MYSQL啟用和查看二進制日誌
server mail etc 文件 查看表 rom 查看 日誌 stat 在/etc/my.cnf文件中【mysqld】下加上: server-id = 1 (在整個Mysql集群中保證唯一) log-bin = binlog log-bin-index = binl
Linux curl與wget 命令的區別和聯絡
當想要直接通過 Linux 命令列下載檔案,馬上就能想到兩個工具:wget 和 curl。它們有很多一樣的特徵,可以很輕易的完成一些相同的任務。 &n
Linux基本命令33:su命令和sudo服務
1 su命令 su命令可以解決切換使用者身份的需求,使得當前使用者在不退出登入的情況下,順暢地切換地切換到其他使用者,比如從root管理員切換至普通使用者: “-” 意味著完全切換到新的使用者,即把環境變數資訊也變更為新使用者的相應資訊,而不是保留原始的資訊。 從 root 管
5.Linux檔案與檔案系統的壓縮和打包
目錄 1.壓縮檔案案的用途 壓縮檔案,顧名思義就是對檔案進行壓縮,通過一些技術手段在不改變資訊內容的前提下減少檔案佔用磁碟的記憶體,在進行網路傳輸時,可以減少傳輸時間。 2.Linux 系統常見的壓縮指令 在 Linux 的環境中,壓縮檔案案的
數字與字串:倒序和相互轉換
//原始碼已在VS2010編譯通過 #include <iostream> #include <sstream> #include <string> #includ
Linux 啟動資訊同時輸出到螢幕和串列埠終端
想要讓 Linux 啟動時的資訊同時顯示在螢幕上並列印在串列埠中,可修改 u-boot 中的啟動引數 :setenv bootargs 'console=tty0 console=ttymxc0,115
Linux核心移植 part4:關於initrd和initramfs
一、initrd ram disk中的file system叫做initrd,全名叫做initial ramdisk。 注意: 當下用initrams多 如何建立initial ramisk host > dd if=/dev/ze
Linux 處理中文字串 :/區分中文和英文的方法
#include <stdio.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <wchar.h>
程序與終端--終端關閉後,後臺程序也終止
問題: ssh登入伺服器,並開啟一個後臺程序,然後自己去做其他事情了。等過了一會兒,當再來檢視時,發現開啟的後臺程序莫名其妙的掛掉了。 原因: 無論程序是在後臺還是在前臺,它都與啟動它的終端例項緊密繫結。當終端關閉時,它通常向繫結到終端的所有程序(前臺
linux記憶體管理2:記憶體對映和需求分頁(英文名字:demand Paging,又叫:缺頁中斷)
圖 10-5 vm_area_struct 資料結構示意圖當可執行映象對映到程序的虛擬地址空間時,將產生一組 vm_area_struct 結構來描述虛擬記憶體區域的起始點和終止點,每個 vm_struct 結構代表可執行映象的一部分,可能是可執行程式碼,也可能是初始化的變數或未初始化的資料。
Linux系統與Unix系統的區別和聯絡
Linux何以備受青睞,致使除微軟以外,國際上有名的硬、軟體廠商都毫無例外地與之結盟、捆綁。甚至連世界IT的龍頭老大“藍後巨人”IBM也要“全面擁抱Linux”呢? 首先,Linux作為自由軟體有兩個特點:一是它免費提
Linux啟動與禁止SSH使用者及IP的登入
下面就針對SSH方面討論一下,如果有人特別關注Linux環境的安全性,第一就從login方面來進行討論 1:Linux啟動或禁止SSH root使用者的登入 2:Linux限制SSH使用者 其實這些東西就是修改一個系統的配置檔案 [[email
linux記憶體管理演算法 :夥伴演算法和slab
良好的作業系統效能部分依賴於作業系統有效管理資源的能力。在過去,堆記憶體管理器是實際的規範,但是其效能會受到記憶體碎片和記憶體回收需求的影響。現在,Linux® 核心使用了源自於 Solaris 的一種方法,但是這種方法在嵌入式系統中已經使用了很長時間了,它是將記憶體作為物件按照大小進行分配。本文將探索
linux檔案與目錄的預設許可權和隱藏許可權。
touch新建檔案或修改檔案時間 每個檔案在liux下都會記錄許多時間引數,其實有三個主要的變動時間,三個時間的意義有多少: * modification time(mtmie): 當檔案內容資料改變時,就會更新這個時間,內容資料是指檔案內容,而不是檔
簡單知識點例項之三:Bootstrap-Table和後臺進行百分百互動的簡單例項
這是一個針對前後臺互動的例子,可以直接套進專案中通暢執行。第二頁之所以資料不對,是因為例子畢竟沒有真正的後臺,所以資料不對。但是可以套入專案中,就正常了。 重點: 其中bootstrap-table有一個search:truse搜尋框的引數我沒有使用,而是自己寫了一個搜尋框,