1、linux下啟動程序的兩種方式:
(1)方式一
手動啟動:即使用者輸入指令直接啟動。 分為前台運作和背景運作。
(2)方式二
排程啟動:即系統根據事先的設定自行啟動程序。
- at指令:在指定時刻運作某一個程序。
- cron指令:周期性的執行相關程序。
2、at指令 啟動程序
(1)at指令功能簡介
在指定的時刻執行相關的程序。
(2)使用at指令需要具備的條件
需要開啟atd服務。
- 檢查atd服務有無開啟的指令 :
$ ps -eLf | grep atd
- 如果沒開啟的話,開啟atd服務的指令:
/etc/init.d/atd start or restart
注意:atd 是守護程序,守護程序和任何終端沒有關系,是以at指令要将輸出重定向到檔案中,否則不會顯示。
(3)at指令的基本文法
- 進入at提示模式:
$ at [參數] [時間]
- 進入後的提示符為:
at >
- 退出at指令:在提示符狀态下輸入:
ctrl+d
舉栗子: 終端中輸入:
$ at 21:01 2020-03-01
,然後出現了at> 提示符,這個時候鍵入
./helloworld >hello.txt
,然後按
ctrl + D
鍵退出 at指令。
在到21:01時,檔案hello.txt中就會被寫入: hello world!

注意: 由于atd服務是守護程序,而守護程序和終端裝置不會建立任何聯系,是以在螢幕上是看不到列印輸出的,必須重定向到檔案中。
(4)at指令中的時間格式
-
HH:MM YYYY-MM-DD
說明:規定在某年某月的某一天的特殊時刻進行該項任務
at 04:00 2009-03-17
-
HH:MM[am|pm] + number [minutes|hours|days|weeks]
說明:規定在某個時間點再加多少時間後才進行該項任務
舉例:
現在5分鐘後$at now + 5 minutes
3天後下午4點$at 04:00pm + 3 days
注意:(3)的例子便是使用了這中格式的時間。
-
能夠直接使用today(今天)、tomorrow(明天)來指定完成指令的時間
舉例:在20:52 執行 hello_world 程式,并且重定向到hello.txt 檔案中。
我運作程式的時候是20:50,可以發現在到了20:52的時候,hello.txt 檔案中便會寫入:hello world!
(5)與at指令相關的其它指令
-
atq指令
功能:查詢目前的等待任務,被執行之後就不會顯示。
使用:沒有參數
舉栗子: 建立一個任務,在21:10執行,當退出時,可以看到新建立的任務配置設定的任務号為7。這個時候在終端中輸入atq 指令,就可以看到等待執行的任務。
linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制 -
atrm指令
功能:删除系統中由at建立的正在等待被執行的任務。
使用: $atrm 任務的工作号(工作号為第一個參數)
還是剛才額例子,這個時候在終端中鍵入 $ atrm 7再次使用$atq 指令就會發現 任務号為7的任務不再等待執行了。linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制
注意:上面的例子會使用到這段代碼,需要編譯一下:
//在工作目錄下建立一個 hellworld.c ,并且編譯重命名為 helloworld
#include <stdio.h>
int main(){
printf("hello world!\n");
return 0;
}
3、cron指令啟動程序
(1)cron指令功能簡介
周期性執行相關程序。
(2)使用cron指令需要具備的條件
需要開啟cron服務。
- 檢查atd服務有無開啟的指令 :
$ps -ef | grep cron
(3)cron指令的基本文法
進入後會讓選擇編輯器,一般選擇:/usr/bin/vim.basic。如果選擇錯了,可以退出cron,重新指定預設編輯器,指令如下:
select-editor //選擇編輯器
注意:select和-editor 中間沒有空格。
(4)進入cron後基本編輯
編輯基本格式 :
* * * * * command
分 時 日 月 周 指令
每個
*
代表的時間和下面對應,共5個
*
,前五個星,用來指定時間,最後command用來指定需要執行的指令(或者說建立什麼任務)。
具體的解釋和限制如下:
- 第1清單示分鐘1~59 每分鐘用*或者 */1表示
- 第2清單示小時1~23(0表示0點)
- 第3清單示日期1~31
- 第4清單示月份1~12
- 第5列辨別号星期0~6(0表示星期天)
- 第6列要運作的指令
(5)時間規則
- 如果寫為
, 表示每*
多代表的時間 。(即:第一列如果指定為*,則表示每分鐘,第二列指定為*
,表示每小時…)*
-
如果想定義間隔,在*後加 “/” 和間隔的數字
舉栗子:每隔一分鐘列印一下系統時間,并重定向到t.log檔案中:
*/1 * * * * date >> ~/t.log
-
代表從某個數字到某個數字-
-
,
分開幾個離散的數字
舉栗子:晚上11點到早上7點之間每兩個小時,早上八點
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
(6)舉栗子
每分鐘執行一次./hello_world 并将結果列印到hello.txt 中。
鍵入:
* * * * * ./hello_world > hello.txt
儲存退出。
終端則會如有如下提示(代表你建立了一個周期性任務):
與cron 相關的其他指令
- crontab -u //設定某個使用者的cron服務,一般root使用者在執行這個指令的時候需要此參數 ,即root使用者檢視其他使用者的cron 服務資訊。-u在沒指定的情況下,代表實際使用者。如下
-
root檢視某使用者的cron設定:crontab -u yuanjianyu -l
:
crontab -l
linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制 -
crontab -r //删除某個使用者的cron服務
例如:root使用者删除yuanjianyu使用者的cron服務。
注意:普通使用者也可以自己删除自己額cron服務。linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制
4、檢視程序狀态
(1)檢視程序狀态資訊之一——ps指令
-
ps指令是Process Status的縮寫。
ps指令用來列出系統中目前運作的那些程序。ps指令列出的是目前那些程序的照,就是執行ps指令的那個時刻的那些程序,如果想要動态的顯示程序資訊,就可以使用top指令。
-
ps -aux
Linux中可以使用ps -aux檢視所有程序。
linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制
快照中:
- PID代表程序ID
- TTY是該程序是由哪個控制台啟動的
- CMD則是指令
注意:
- 如果想列出更詳細的資訊,則可使用指令:“ps-auxw”。參數w表示加寬顯示的指令行,參數w可以寫多次,通常最多寫3次,表示加寬3次,這足以顯示很長的指令行了。
- 在終端直接輸入ps 顯示目前終端上運作的程序。
(2)檢視程序狀态資訊之一——top指令
top指令是Linux下常用的性能分析工具,能夠實時顯示系統中各個程序的資源占用狀況,類似于Windows的任務管理器。下面詳細介紹它的使用方法。
注意:
- 圖檔中的資訊在一直變化。
- top的更新版本為htop,體驗更好。
5、程序控制
(1)kill 指令—— 向程序發送信号
- 功能:向程序發送信号(包括暫停等信号)。
- 通過kill -l檢視kill所支援發送的信号。
linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制 -
通過kill -signalnum pid的方式向程序發送信号
舉栗子:
向pid=4682的程序發送SIGSTOP信号暫停程序。kill -19 4682
注意:如果不選擇信号的累心預設情況下發送的是SIGKILL信号。
(2)指定(nice指令)、更改(renice)程序優先級
- nice是按照指定的優先級執行指令
- renice更改正在運作的程序的優先級
系統中運作的每個程序都有一個優先級(亦稱nice 值),其範圍從 -20 (最高優先級)到 19 (最低優先級)。優先級越高,其值越小。預設情況下,程序的優先級是 0 (基本排程優先級)。
優先級比較大的程序(nice 值比較小,最低到 -20)相對優先級比較小的程序(直到 19)将比較頻繁地被排程運作,是以就擁有更多的程序周期。一般使用者隻能降低它們自己程序的優先級别,并限于 0 到 19 之間。超級使用者(root)可以将任何程序的優先級設定為任何值。
(3)檢視程序優先級
通過htop指令檢視程序狀态資訊時,可以看到其中有一列名為NI,NI指的就是優先級。
(4)、指定(nice)、修改(renice)程序優先級的指令的使用方法
-
nice用法:指定将要運作的程序的優先級
nice -n 優先級 command
例如:nice -n 6 ./a.out 以優先級6來運作a.out
-
renice用法:用來修改程序的優先級
renice 優先級 pid
例如: renice +10 9621 将9621程序的優先級改為10
(5)其他指令
-
jobs
檢視目前有多少在背景運作的指令。
舉栗子:在背景運作一個程式,該程式每5秒列印一次hello world! 此時執行 jobs 指令,可以看到該指令的執行資訊。
。
-
bg指令
将一個在背景暫停的指令,變成繼續執行。如果背景中有多個指令,可以用bg N将選中的指令調出,N是通過jobs指令查到的背景正在執行的指令的序号(不是pid)。