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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...