天天看點

linux下程序管理1、linux下啟動程序的兩種方式:2、at指令 啟動程序3、cron指令啟動程序4、檢視程序狀态5、程序控制

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!

linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制

注意: 由于atd服務是守護程序,而守護程序和終端裝置不會建立任何聯系,是以在螢幕上是看不到列印輸出的,必須重定向到檔案中。

(4)at指令中的時間格式
  • HH:MM YYYY-MM-DD

    說明:規定在某年某月的某一天的特殊時刻進行該項任務

    at 04:00 2009-03-17

  • HH:MM[am|pm] + number [minutes|hours|days|weeks]

    說明:規定在某個時間點再加多少時間後才進行該項任務

    舉例:

    $at now + 5 minutes

    現在5分鐘後

    $at 04:00pm + 3 days

    3天後下午4點

注意:(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 任務的工作号(工作号為第一個參數)

    linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制
    還是剛才額例子,這個時候在終端中鍵入 $ atrm 7再次使用$atq 指令就會發現 任務号為7的任務不再等待執行了。

注意:上面的例子會使用到這段代碼,需要編譯一下:

//在工作目錄下建立一個 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

儲存退出。

linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制

終端則會如有如下提示(代表你建立了一個周期性任務):

![在這裡插入圖檔描述](https://img-blog.csdnimg.cn/20200301213524826.png

(7)與cron 相關的其他指令

  • crontab -u //設定某個使用者的cron服務,一般root使用者在執行這個指令的時候需要此參數 ,即root使用者檢視其他使用者的cron 服務資訊。-u在沒指定的情況下,代表實際使用者。如下
  • root檢視某使用者的cron設定:crontab -u yuanjianyu -l

    ![在這裡插入圖檔描述](https://img-blog.csdnimg.cn/20200301215423926.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbnRpYW55aTk5MjE=,size_16,color_FFFFFF,t_70

  • root 檢視自己的cron 設定
    linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制
  • 普通使用者檢視自己名下的任務(普通使用者不指定 -u,隻能檢視自己的cron服務):

    crontab -l

    linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制
  • crontab -r //删除某個使用者的cron服務

    例如:root使用者删除yuanjianyu使用者的cron服務。

    linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制
    注意:普通使用者也可以自己删除自己額cron服務。

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的任務管理器。下面詳細介紹它的使用方法。

linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制

注意:

  • 圖檔中的資訊在一直變化。
  • top的更新版本為htop,體驗更好。
linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制

5、程序控制

(1)kill 指令—— 向程序發送信号

  • 功能:向程序發送信号(包括暫停等信号)。
  • 通過kill -l檢視kill所支援發送的信号。
    linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制
  • 通過kill -signalnum pid的方式向程序發送信号

    舉栗子:

    kill -19 4682

    向pid=4682的程序發送SIGSTOP信号暫停程序。

注意:如果不選擇信号的累心預設情況下發送的是SIGKILL信号。

(2)指定(nice指令)、更改(renice)程序優先級

  • nice是按照指定的優先級執行指令
  • renice更改正在運作的程序的優先級

系統中運作的每個程序都有一個優先級(亦稱nice 值),其範圍從 -20 (最高優先級)到 19 (最低優先級)。優先級越高,其值越小。預設情況下,程序的優先級是 0 (基本排程優先級)。

優先級比較大的程序(nice 值比較小,最低到 -20)相對優先級比較小的程序(直到 19)将比較頻繁地被排程運作,是以就擁有更多的程序周期。一般使用者隻能降低它們自己程序的優先級别,并限于 0 到 19 之間。超級使用者(root)可以将任何程序的優先級設定為任何值。

(3)檢視程序優先級

通過htop指令檢視程序狀态資訊時,可以看到其中有一列名為NI,NI指的就是優先級。

linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制

(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 指令,可以看到該指令的執行資訊。

![在這裡插入圖檔描述](https://img-blog.csdnimg.cn/20200301225033479.png

  • &

    運作一個程式時,直接放到背景。

    舉栗子:在背景運作了一個程式,該程式每隔5秒列印hello world! 這個時候按ctrl+z 沒有任何反應。 當輸入 fg 2 時,将程式有背景拖至前台運作,此時按ctrl+z 程式暫停。

    linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制
  • Ctrl-Z

    将一個正在前台執行的程序放到背景,并且暫停。

舉栗子:在終端運作一個程式,每隔5秒列印hello world! 當按下:ctrl + z 時

linux下程式管理1、linux下啟動程式的兩種方式:2、at指令 啟動程式3、cron指令啟動程式4、檢視程式狀态5、程式控制
  • fg指令

    将背景中的指令調至前台繼續運作。如果背景中有多個指令,可以用 fg N将選中的指令調出,N是通過jobs指令查到的背景正在執行的指令的序号[N] (不是pid)。

  • bg指令

    将一個在背景暫停的指令,變成繼續執行。如果背景中有多個指令,可以用bg N将選中的指令調出,N是通過jobs指令查到的背景正在執行的指令的序号(不是pid)。

繼續閱讀