后台進程又叫守護進程,你知道嗎?
操作系統中,前台進程和后台進程有什么區別?特征是什么?
后台程序基本上不和用戶交互,優先級別稍微低一點
前台的程序和用戶交互,需要較高的響應速度,優先級別稍微高一點
直接從后台手工啟動一個進程用得比較少一些,除非是該進程甚為耗時,且用戶也不急着需要結果的時候。假設用戶要啟動一個需要長時間運行的格式化文本文件的進程。為了不使整個shell在格式化過程中都處於“癱瘓”狀態,從后台啟動這個進程是明智的選擇。
LINUX后台進程與前台進程的區別
LINUX后台進程也叫守護進程(Daemon),是運行在后台的一種特殊進程。它獨立於控制終端並且周期性地執行某種任務或等待處理某些發生的事件。
一般用作系統服務,可以用crontab提交,編輯或者刪除相應得作業。
守護的意思就是不受終端控制。Linux的大多數服務器就是用守護進程實現的。比如,Internet服務器inetd,Web服務器httpd等。同時,守護進程完成許多系統任務。比如,作業規划進程crond,打印進程lpd等。
前台進程就是用戶使用的有控制終端的進程
shell下,進程的前台與后台運行
跟系統任務相關的幾個命令:fg、bg、jobs、&、ctrl+z
-
& 最經常被用到
這個用在一個命令的最后,可以把這個命令放到后台執行
-
ctrl + z
可以將一個正在前台執行的命令放到后台,並且暫停
-
jobs
查看當前有多少在后台運行的命令
-
fg
將后台中的命令調至前台繼續運行
如果后台中有多個命令,可以用 fg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后台正在執行的命令的序號(不是pid)
- bg 將一個在后台暫停的命令,變成繼續執行
如果后台中有多個命令,可以用bg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后台正在執行的命令的序號(不是pid)
-
jobs列舉出后台作業信息。([作業號] 運行狀態 作業名稱)
-
ctrl+z 將任務放到后台去,並暫停;
-
bg <%int> 將后台任務喚醒,在后台運行;
-
fg <%int> 將后任務的程序放到前台;
-
ctrl+z 將任務放到后台去,並暫停.
主進程waitpid(pid,&status,WUNTRACED)時,子進程
退出時,父進程被喚醒
-
將后台任務喚醒,在后台運行;
kill(pid,SIGCONT);
-
將后台運行的程序放到前台;
kill(pid,SIGCONT);
waitpid(pid,&status,WUNTRACED);
//可見,后台運行與前台運行的區別只在於前台運行等待子進程的退出而阻塞父進程操作。而后台運行時,可以在父進程中輸入命令繼續其他操作。本質上沒有區別,都是給子進程發送SIGCONT信號。