自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在Linux中正確“殺死”程序

系統(tǒng) Linux
始終首先使用像SIGTERM這樣較為溫和的信號,而不是立即使用像SIGKILL這樣強制性的信號。這樣可以給進(jìn)程執(zhí)行清理操作和關(guān)閉文件的機會,有助于防止數(shù)據(jù)損壞。

DevOps工程師或系統(tǒng)管理員經(jīng)常需要管理系統(tǒng)進(jìn)程。了解如何管理進(jìn)程對于監(jiān)控、調(diào)試和擴展應(yīng)用程序是不可或缺的。每個DevOps工程師都應(yīng)熟悉一個基本命令即kill命令,它可以向進(jìn)程發(fā)送信號以實現(xiàn)中斷、控制或終止進(jìn)程的功能。我們需要了解不同信號的含義及其適用場景。

本文介紹kill命令的演變歷程、工作原理以及一些最佳實踐,幫助大家更好地理解和應(yīng)用這個重要的進(jìn)程管理工具。

1 kill命令簡介

在類UNIX操作系統(tǒng)中,kill命令的核心功能是向進(jìn)程發(fā)送信號。雖然"kill"這個名字可能暗示其主要目的是終止進(jìn)程,但重要的是我們要理解"kill"更多的是關(guān)于發(fā)送信號的操作,而終止(SIGTERM)只是它可以發(fā)送的眾多信號中的一種。

以下是一些使用kill命令的基本示例:

  • 發(fā)送默認(rèn)的TERM信號:
$ kill [pid]
  • 發(fā)送特定的信號:可以使用信號的名稱或編號指定要發(fā)送的信號。
$ kill -SIGNAME [pid]
  • 發(fā)送信號給多個進(jìn)程:
$ kill -SIGNAME [pid1] [pid2] [pid3] ...
  • 列出可用的信號:
$ kill -l
 1) SIGHUP  2) SIGINT  3) SIGQUIT  4) SIGILL  5) SIGTRAP
 6) SIGABRT  7) SIGBUS  8) SIGFPE  9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

2 kill命令的歷史

kill命令的起源可以追溯到20世紀(jì)60年代末和70年代初的UNIX誕生。UNIX是由肯·湯普森(Ken Thompson)、丹尼斯·里奇(Dennis Ritchie)和其他人在AT&T貝爾實驗室開發(fā)的。UNIX的主要目標(biāo)是創(chuàng)建一個簡單的操作系統(tǒng),支持多任務(wù)處理,用高級語言(C語言)編寫,并在命令行環(huán)境中提供豐富的實用工具集。

UNIX的指導(dǎo)原則之一是“做好一件事并做好它”。這意味著實用工具被設(shè)計成能夠高效地執(zhí)行單個任務(wù),并與其他程序良好配合。正是出于這一理念,許多小型、多用途的實用工具被創(chuàng)造出來,可以以各種方式組合以執(zhí)行復(fù)雜的任務(wù)。kill命令是這一理念的典型例子:它的唯一目的是向進(jìn)程發(fā)送信號,是不可或缺的。在UNIX系統(tǒng)中,kill命令是一種強大而靈活的工具,使我們能夠?qū)M(jìn)程進(jìn)行控制和管理,為工作提供了重要的支持。

2.1 kill命令的演變

  • 早期:在UNIX的早期版本中,進(jìn)程管理是基礎(chǔ)性的。發(fā)送信號給進(jìn)程的能力變得十分重要,因為它提供了一種中斷、控制或終止進(jìn)程的方式。kill命令就是為了滿足這個需求而引入的。它的名字可能有些誤導(dǎo),因為其主要目的不僅僅是“殺死”進(jìn)程,而是向進(jìn)程發(fā)送各種信號。
  • System V UNIX和POSIX:隨著UNIX的演變和不同的變種出現(xiàn),對標(biāo)準(zhǔn)化的需求變得顯而易見。為了滿足這一需求,System V UNIX引入了許多標(biāo)準(zhǔn),并最終建立了POSIX(可移植操作系統(tǒng)接口)標(biāo)準(zhǔn)。在這些標(biāo)準(zhǔn)的指導(dǎo)下,像kill這樣的命令的行為被形式化,確保在各種UNIX系統(tǒng)中保持一致。
  • 擴展和現(xiàn)代用法:隨著類UNIX系統(tǒng)(如Linux)的出現(xiàn),kill命令獲得了額外的功能和選項。例如,Linux中的現(xiàn)代版本的kill支持使用pkill和killall命令按名稱發(fā)送信號給進(jìn)程。

3 kill命令的工作原理

UNIX系統(tǒng)中的每個進(jìn)程都有唯一的進(jìn)程ID(PID)。kill命令通過向具有給定PID的進(jìn)程發(fā)送指定的信號來工作。如果未指定信號,kill默認(rèn)發(fā)送SIGTERM信號,這會要求進(jìn)程終止,以便進(jìn)行資源清理或完成任何必要的最后任務(wù)。

圖片圖片

kill的Python封裝

import os
import signal
import sys

def kill_process(pid, sig=signal.SIGTERM):
    try:
        os.kill(pid, sig)
        print(f"已向進(jìn)程{pid}發(fā)送信號{sig}。")
    except ProcessLookupError:
        print(f"錯誤:找不到進(jìn)程{pid}。")
    except PermissionError:
        print(f"錯誤:無權(quán)向進(jìn)程{pid}發(fā)送信號。")

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("用法:python kill_impl.py  ")
        sys.exit(1)

    sig = int(sys.argv[1])
    pid = int(sys.argv[2])

    kill_process(pid, sig)

4 kill命令的常見信號

4.1 SIGTERM(15)

  • 描述:請求進(jìn)程終止。該信號允許進(jìn)程在退出之前執(zhí)行清理操作。
  • 示例:
$ kill -15 12345

4.2 SIGKILL(9)

  • 描述:強制終止進(jìn)程。進(jìn)程無法捕獲、阻塞或忽略此信號。
  • 示例:
$ kill -9 12345

4.3 SIGHUP(1)

  • 描述:掛斷信號。最初用于通知進(jìn)程控制終端已關(guān)閉?,F(xiàn)在通常用于提示進(jìn)程重新加載其配置。
  • 示例:
$ kill -1 12345

4.4 SIGINT(2)

  • 描述:中斷信號。這是在終端中按下Ctrl+C時發(fā)送的信號。
  • 示例:
$ kill -2 12345

4.5 SIGQUIT(3)

  • 描述:退出信號。類似于SIGINT,但還會導(dǎo)致進(jìn)程生成核心轉(zhuǎn)儲,用于調(diào)試。
  • 示例:
$ kill -3 12345

5 kill命令的最佳實踐

在DevOps環(huán)境中管理系統(tǒng)時,妥善且有效地使用kill命令非常重要。以下是DevOps工程師在使用kill命令時應(yīng)遵循的一些最佳實踐:

  • 優(yōu)雅終止:始終首先使用像SIGTERM這樣較為溫和的信號,而不是立即使用像SIGKILL這樣強制性的信號。這樣可以給進(jìn)程執(zhí)行清理操作和關(guān)閉文件的機會,有助于防止數(shù)據(jù)損壞。
  • 了解進(jìn)程:在發(fā)送任何信號之前,使用像ps、top或htop這樣的命令來識別進(jìn)程并了解其狀態(tài)。驗證進(jìn)程所有者。除非絕對必要且經(jīng)過授權(quán),否則不要終止屬于其他用戶的進(jìn)程。
  • 避免直接使用PID:不要手動輸入PID,而是使用命令替換,例如kill $(pgrep進(jìn)程名稱)。這樣可以減少意外終止錯誤進(jìn)程的風(fēng)險。
  • 使用進(jìn)程組:如果一個進(jìn)程生成了許多子進(jìn)程,并且您希望向它們發(fā)送信號,請考慮向父進(jìn)程的進(jìn)程組發(fā)送信號。

這些最佳實踐有助于更加安全地使用kill命令,減少意外終止進(jìn)程或造成系統(tǒng)不穩(wěn)定的風(fēng)險。請務(wù)必在管理系統(tǒng)時遵循這些準(zhǔn)則,以確保系統(tǒng)的可靠性和穩(wěn)定性。

責(zé)任編輯:武曉燕 來源: Java學(xué)研大本營
相關(guān)推薦

2021-11-05 15:10:28

UbuntuLinuxJAVA_HOME

2024-02-05 18:23:23

父進(jìn)程應(yīng)用程序程序

2015-08-05 09:33:21

Javawaitnotify

2021-10-25 09:00:37

Node.jsJS前端

2019-10-18 10:43:11

JPASpring Boot Flyway

2011-03-14 16:42:54

DB2 UDB監(jiān)控死鎖

2022-06-13 07:33:57

socketReact組件

2022-09-16 14:13:50

人工智能樓宇自動化

2021-11-01 12:13:53

Linux僵尸進(jìn)程

2022-08-10 13:12:04

Linuxcat命令

2022-12-12 11:14:06

LinuxID

2020-05-28 08:45:21

Arch LinuxLinuxKDE Plasma

2010-06-18 13:14:26

SQL Server

2018-03-28 08:30:01

Linux倉庫應(yīng)用程序

2019-08-13 15:39:27

Linux應(yīng)用程序

2011-06-29 16:50:17

Qt 顯示寬字符

2016-08-02 10:34:17

LinuxWindows雙啟動

2014-01-06 11:24:51

Linux桌面啟動程序

2010-08-20 11:16:39

DB2 優(yōu)化器

2023-05-22 11:26:32

UbuntuQemu
點贊
收藏

51CTO技術(shù)棧公眾號