作業系統中,前台進程和後台進程有什麼區別。特徵是什麼。
背景程式基本上不和使用者互動,優先順序別稍微低一點
前台的程式和使用者互動,需要較高的響應速度,優先順序別稍微高一點
直接從後台手工啟動一個進程用得比較少一些,除非是該進程甚為耗時,且使用者也不急著需要結果的時候。假設使用者要啟動一個需要長時間啟動並執行格式化文字檔的進程。為了不使整個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系統操作中不可缺少的程式之一。