Linux 基礎教程 39-作業控制

来源:https://www.cnblogs.com/surpassme/archive/2018/08/20/9508717.html
-Advertisement-
Play Games

    在Linux系統中,作業是由一個或多個關聯進程組成的。用戶可以運行多個作業並可以在作業間切換。而作業控制則是對作業的行為進行控制,允許用戶對作業的前後臺的進行切換和終止操作等。作業相關的控制命令如下所示: 後臺符號(&):讓作業在後臺運行 快捷鍵Ctrl+Z:讓作業切換到 ...


    在Linux系統中,作業是由一個或多個關聯進程組成的。用戶可以運行多個作業並可以在作業間切換。而作業控制則是對作業的行為進行控制,允許用戶對作業的前後臺的進行切換和終止操作等。作業相關的控制命令如下所示:

  • 後臺符號(&):讓作業在後臺運行
  • 快捷鍵Ctrl+Z:讓作業切換到後臺並停止運行
  • 命令jobs:顯示作業列表
  • 命令fg:將作業切換到前臺並運行
  • 命令bg:將作業切換到後臺並運行
  • 命令kill:終止作業

    當用戶在終端中啟動一個作業時,它會預設在前臺運行。前臺作業的特點就是從標準輸入接收用戶指令並通過標準輸出將返回信息展示給用戶。
    後臺作業則脫離了標準輸入和標準輸出,並不需要用戶參與,默默在用戶看不到的地方運行。類似於Windows中多視窗界面,選中一個視窗則自動激活視窗並切換到前臺運行,而其他視窗則自動轉入後臺運行。

後臺符號 &

    後臺符號則是指 ** & **,使用起來也非常簡單,只需要把該符號放置在執行命令的後面即可。通過在執行一個命令需要花費較長的時間或執行命令後就不再需要用戶輸入命令等操作時使用,示例如下:

[root@localhost ~]# sleep 20m &
[1] 12925
  • 後臺符號與前面的命令之間需要添加空格
  • [1]表示後臺作業任務的編號
  • 12925表示後臺作業對應的PID
如通過管道技術,作業由一組命令組成,此時返回的PID是最後一個命令程式所對應的PID

快捷鍵Ctrl+Z

    如果在執行命令的忘記輸入後臺符號時,此時我們可以使用快捷鍵Ctrl+Z,將前臺作業切換到後臺。而該作業在切換到後臺也自動會停止運行,示例如下:

[root@localhost ~]# top -d 3
top - 23:09:05 up 1 day,  8:56,  1 user,  load average: 0.41, 0.48, 0.68
KiB Mem :13174040+total,91322784 free,34024536 used,6393076 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 96571448 avail Mem

PID  USER   PR  NI VIRT   RES   SHR   S  %CPU %MEM TIME+    COMMAND
2325 mysql  20  0  20.7g 383068 12780 S  23.5 0.3  47:02.72 mysqld
1873 cinder 20  0 476152 103060 8900  S  5.9  0.1  40:59.23 cinder-backup
# 使用Ctrl+Z可以看到作業已經轉入後臺並停止運行
[3]+  已停止               top -d 3

顯示作業列表jobs

基本用法

jobs [選項] [jobID]

其常用選項如下所示:

選項 說明
-l 顯示PID
-p 僅顯示作業的PID
-r 僅顯示運行狀態的作業
-s 僅顯示停止狀態的作業

jobs示例

1、顯示所有作業

[root@localhost ~]# jobs
[2]-  已停止               top -d 3
[3]+  已停止               top -d 3
[4]   運行中               sleep 20m &

2、顯示作業的ID

[root@localhost ~]# jobs -p
5442
14740
39178

3、僅顯示停止狀態的作業

[root@localhost ~]# jobs -s
[2]-  已停止               top -d 3
[3]+  已停止               top -d 3

fg

   fg全稱frontground,是指將作業切換到前臺並運行。

基本用法

fg [作業標識]

fg示例

1、將後臺作業轉換到前臺並運行

[root@localhost ~]# jobs
[3]+  已停止               top -d 3
[4]   運行中               sleep 20m &
[6]   運行中               sleep 120m &
[7]-  運行中               sleep 10h &
[root@localhost ~]# fg %3
top - 23:09:05 up 1 day,  8:56,  1 user,  load average: 0.41, 0.48, 0.68
KiB Mem :13174040+total,91322784 free,34024536 used,6393076 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 96571448 avail Mem

PID  USER   PR  NI VIRT   RES   SHR   S  %CPU %MEM TIME+    COMMAND
2325 mysql  20  0  20.7g 383068 12780 S  23.5 0.3  47:02.72 mysqld
1873 cinder 20  0 476152 103060 8900  S  5.9  0.1  40:59.23 cinder-backup

bg

    bg全稱background,是指的主要作用是將作業切換到後臺並運行。

基本用法

bg [作業標識]

bg示例

1、將作業轉換到後臺並運行

[root@localhost ~]# jobs
[2]-  已停止               top -d 3
[3]   已停止               top -d 3
[4]   運行中               sleep 20m &
[5]   運行中               sleep 120s &
[6]+  已停止               sleep 120m
[root@localhost ~]# bg %6
[6]+ sleep 120m &
[root@localhost ~]# jobs
[2]+  已停止               top -d 3
[3]   已停止               top -d 3
[4]   運行中               sleep 20m &
[5]   運行中               sleep 120s &
[6]-  運行中               sleep 120m &

終止作業

    要想終止作業,則需要使用kill命令即,其常用法如下所示:

kill [jobID]

示例如下所示:

[root@localhost ~]# jobs
[3]+  已停止               top -d 3
[6]   運行中               sleep 120m &
[7]-  運行中               sleep 10h &
[root@localhost ~]# kill %7
[7]-  已終止               sleep 10h
[root@localhost ~]# jobs
[3]+  已停止               top -d 3
[6]-  運行中               sleep 120m &

作業名字

    在上面的示例,使用的是%n表示形式來指定一個作業任務,除這種方法外,還有其他更多的方式來指定作業任務,詳細如下所示:

表示形式 解釋 示例
%number Number必須為正整數,指根據編號確定job fg %1
%string 匹配命令行以string開頭的作業,如果匹配到多個則報錯 kill %sleep
%?string 匹配命令行含有string的作業,如果是通過管道連接的多個命令,則僅匹配第一個命令 bg %?sleep
%% 匹配在作業列表中最近一個被切換到後臺的作業 kill %%
%+ 同%% kill %+
%- 匹配在%%所指定的作業前面的作業 kill %-

示例

1、%string的用法

[root@localhost ~]# jobs
[3]-  已停止               top -d 3
[6]   運行中               sleep 120m &
[7]+  已停止               sleep 120h
[root@localhost ~]# kill %top
[root@localhost ~]# jobs
[6]-  運行中               sleep 120m &
[7]+  已停止               sleep 120h

2、%%用法

[root@localhost ~]# jobs
[6]-  運行中               sleep 120m &
[7]+  已停止               sleep 120h
# 作業編號後面的+/-分別對應 %+ 和 %-
[root@localhost ~]# bg %7
[7]+ sleep 120h &
[root@localhost ~]# jobs
[6]-  運行中               sleep 120m &
[7]+  運行中               sleep 120h &
[root@localhost ~]# kill %%
[7]+  已終止               sleep 120h
[root@localhost ~]# jobs
[6]+  運行中               sleep 120m &

nohup

    終端是我們進入Linux系統的入口,無論是排查問題、執行操作面對的都是Linux終端。當用戶進行註銷、斷開網路時,終端均會收到SIGHUP(hangup)信號,然後關閉其所屬的子進程,而如果我們不希望某些進程被這個SIGHUP信號影響,就需要使用命令nohup
    nohup英文解釋如下:

run a command immune to hangups, with output to a non-tty

在使用nohup命令後,程式是對SIGHUP免疫的,不受影響的。而nohup與 & 的區別如下

  • 後臺符號(&):只是暫時讓進程運行於終端後臺,而SIGHUP仍然影響到這些後臺的進程
  • nohup:在將進程運行於終端後臺並不受SIGHUP影響。

基本用法

nohup [命令] &
  • 如果終端是標準輸入,則從/dev/null進行重定向
  • 如果終端是標準輸出,則輸出重定向於當前目錄中nohup.out文件,否則則重定向到$HOME/nohup.out
  • 如果終端是標準錯誤輸出,則重定向於標準輸出
  • 如果要保存輸出到文件,可以使用nohup [命令] > path/FILE

示例用法

# 將命令設置為後臺運行
[root@localhost ~]# nohup ping www.baiduc.com &
[1] 36247
# 因未指定輸出重定向,預設將標準輸出、標準錯誤輸出都追加至nohup.out
[root@localhost ~]# nohup: 忽略輸入並把輸出追加到"nohup.out"
[root@localhost ~]# jobs
[1]+  運行中               nohup ping www.baiduc.com &
# 重定向至家目錄中
[root@localhost ~]# nohup ping www.baidu.com > ~/pingTest.txt &
[1] 12588
# 雖指定重定向文件,但未指定標準錯誤輸出重定向文件,因此會出現以下警告
[root@localhost ~]# nohup: 忽略輸入重定向錯誤到標準輸出端
[root@localhost ~]# nohup ping www.baidu.com > ~/pingTest.txt 2>&1  &
[3] 34498
  • ~/pingTest.txt:表示將標準輸出(1)重定向於文件pingTest.txt中

  • 2>&1:表示將標準錯誤輸出(2)重定向到標準輸出(1),因些可將標準輸出和標準錯誤輸出均重定向到文件pingTest.txt中
  • 如果不需要保存標準錯誤輸出和標準輸出,則可以重定向於/dev/null

本文同步在微信訂閱號上發佈,如各位小伙伴們喜歡我的文章,也可以關註我的微信訂閱號:woaitest,或掃描下麵的二維碼添加關註:
MyQRCode.jpg


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 近一個月一直在寫業務,空閑時間刷刷leetcode,刷題過程中遇到了一道比較有意思的題目,和大家分享。 題目描述: 給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算符。返回被除數 dividend 除以除數 divisor 得到的商。 ...
  • 廢話不說,直接開門見山! 需要在WebContent下的lib下導入兩個包 mybatis-3.2.5.jar ojdbc6.jar 1 package com.xdl.entity; 2 3 import java.io.Serializable; 4 5 public class Dept im ...
  • 使用mapper代理方式開發: 需要編寫mapper介面,UserMapper.java需要編寫映射文件,UserMapper.xml需要遵循一些開發規範,mybatis便可以自動生成mapper介面實現類代理對象 遵循的開發規範:1:UserMapper.xml中namespace命名空間 與 U ...
  • CLR線程池並不會在CLR初始化時立即建立線程,而是在應用程式要創建線程來運行任務時,線程池才初始化一個線程。線程池初始化時是沒有線程的,線程池裡的線程的初始化與其他線程一樣,但是在完成任務以後,該線程不會自行銷毀,而是以掛起的狀態返回到線程池。直到應用程式再次向線程池發出請求時,線程池裡掛起的線程 ...
  • 概述 Windows Community Toolkit 4.0 於 2018 月 8 月初發佈:Windows Community Toolkit 4.0 Release Note. 4.0 版本相較於 3.0,增加了 DataGrid 等控制項,Sample App 支持了 Fluent Desi ...
  • 之前研究過c#的async和await關鍵字,幕後幹了什麼,但是不知道為什麼找不到相關資料了。現在重新研究一遍,順便記錄下來,方便以後查閱。基礎知識async 關鍵字標註一個方法,該方法返回值是一個Task、或者Task、void、包含GetAwaiter方法的類型。該方法通常包含一個await表達... ...
  • protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);RegisterEvents();} private void RegisterEvents(){//TaskScheduler.UnobservedTas ...
  • 在敘述 "Controller" 一文中,有一處未做解釋,即CreateControllerFactory方法中ControllerActionDescriptor參數是如何產生的。這是因為其與Action的關聯性更大,所以放在本文中繼續描述。 回到MvcRouteHandler或者MvcAttri ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...