
簡介本資源是一份面向高校計算機專業(yè)本科生的操作系統(tǒng)課程實驗報告聚焦Linux用戶接口與編程環(huán)境的實踐入門幫助初學(xué)者系統(tǒng)掌握命令行操作、系統(tǒng)管理基礎(chǔ)及C/Shell程序開發(fā)全流程。資源為1個609KB的Word文檔.docx完整覆蓋5大實驗?zāi)KLinux常用命令詳解ls/uname/man/pwd等參數(shù)用法、U盤掛載與卸載實操、vi/vim編輯器基礎(chǔ)操作、GCC編譯運行C程序步驟、Shell腳本三種執(zhí)行方式另含root與sudo權(quán)限機制的原理說明與安全使用建議。內(nèi)容結(jié)構(gòu)清晰命令示例詳實附帶關(guān)鍵參數(shù)對比和典型應(yīng)用場景解析便于對照復(fù)現(xiàn)與課后鞏固。目前已有107人學(xué)習(xí)下載適合作為操作系統(tǒng)實驗課配套材料、Linux入門自學(xué)筆記或期末復(fù)習(xí)參考文檔。1. 這不是“黑屏命令行”而是你操作系統(tǒng)的第一雙眼睛Linux用戶接口到底在說什么你第一次點開終端看到一個閃爍的光標(biāo)敲下ls回車后跳出一堆文件名——那一刻你可能以為自己在“用命令”其實你正在和操作系統(tǒng)“對話”。這根本不是什么玄學(xué)操作而是一套設(shè)計得非常清晰的「人機接口」Linux 的字符界面也就是常說的 Terminal / Shell就是操作系統(tǒng)為你準(zhǔn)備的第一雙眼睛、第一雙手。它不靠圖標(biāo)和菜單而是用文字指令告訴你“系統(tǒng)現(xiàn)在什么樣”“我能做什么”“文件藏在哪”“程序怎么跑起來”。比如ls -a不是亂加字母而是說“把當(dāng)前目錄里所有東西——連那些名字前面帶點.的‘隱身文件’——都給我列出來”man ls更不是打開說明書而是直接喊來一位隨叫隨到的“系統(tǒng)向?qū)А闭驹谀闵磉呉痪渚浣忉宭s能干什么、每個參數(shù)什么意思、連新手常踩的坑都提前標(biāo)好了。這份實驗材料就是帶你從“不敢敲回車”變成“知道敲完會發(fā)生什么”的第一步它不教你造操作系統(tǒng)但教會你真正看懂、摸清、用活你每天打交道的那個系統(tǒng)。適合誰零基礎(chǔ)剛裝好 Linux 虛擬機的同學(xué)、寫 Python 卻總卡在“怎么把代碼變成可運行文件”的初學(xué)者、還有被老師布置了“交一份 Linux 實驗報告”卻連pwd和cd都分不清的你——別怕我們從光標(biāo)開始一招一式全拆給你看。2. 先搞懂三類命令查狀態(tài)、看幫助、管文件——它們是你每天必用的“操作系統(tǒng)遙控器”Linux 終端里上百條命令新手根本不用全記。真正天天用、次次離不開的就這三類查系統(tǒng)狀態(tài)的比如你現(xiàn)在用的是什么系統(tǒng)、幾點了、誰登錄著、查幫助文檔的遇到不會的命令3 秒內(nèi)知道怎么用、管文件和目錄的創(chuàng)建、刪掉、看看里面有什么。它們就像遙控器上的“電源鍵、音量鍵、頻道鍵”——不多但按對了整個系統(tǒng)就聽你指揮。下面我們就用實驗里最核心的幾個命令手把手帶你走一遍真實操作流不是背參數(shù)而是理解“為什么這樣設(shè)計”“我敲下去系統(tǒng)在后臺干了什么”。2.1 查系統(tǒng)狀態(tài)uname和date不是報菜名是在讀取系統(tǒng)“身份證”uname這個命令名字看著像英文單詞其實它干的事特別實在讀取內(nèi)核給你的“系統(tǒng)身份證”。你電腦上跑的是哪個版本的 Linux是 64 位還是 32 位主機叫什么名字這些信息不是存在某個配置文件里讓你去翻而是內(nèi)核實時維護的一組“狀態(tài)快照”uname就是那個專門負(fù)責(zé)把快照內(nèi)容翻譯成你能看懂的文字的工具。uname -a這條命令會一次性輸出全部信息典型結(jié)果長這樣Linux ubuntu2204 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:37:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux我們來逐段“翻譯”Linux這是內(nèi)核名稱-s參數(shù)單獨輸出的就是這個ubuntu2204這是你的主機名-n參數(shù)單獨輸出的就是這個相當(dāng)于你電腦的“小名”5.15.0-91-generic這是內(nèi)核發(fā)行版本號-r參數(shù)輸出它決定了你系統(tǒng)底層能支持哪些新硬件、哪些安全補丁x86_64這是硬件平臺-i參數(shù)輸出說明你用的是主流的 64 位 Intel/AMD CPU最后一串GNU/Linux是操作系統(tǒng)類型表示這是基于 GNU 工具鏈的 Linux 系統(tǒng)。提示uname -a是新手最該記住的“一鍵體檢”命令。當(dāng)你裝完系統(tǒng)、配完環(huán)境、或者別人問你“你用的是什么系統(tǒng)”敲這一行截圖發(fā)過去比說一百句都清楚。再來看date它更直白告訴系統(tǒng)“現(xiàn)在幾點了”然后系統(tǒng)就把當(dāng)前時間原樣吐給你。但它背后有個重要細(xì)節(jié)Linux 系統(tǒng)里有兩個“時間”——硬件時鐘RTC關(guān)機也走和系統(tǒng)時鐘OS Clock開機才啟動。date讀的是系統(tǒng)時鐘所以如果你發(fā)現(xiàn)時間不準(zhǔn)不是date命令錯了而是系統(tǒng)時鐘沒同步。不過對新手來說先學(xué)會用date看時間、用date %Y-%m-%d %H:%M自定義格式比如只顯示年月日時分就夠用了。2.2 查幫助文檔man不是翻書是喚醒一個住在終端里的“活體說明書”很多新手一看到man ls就懵屏幕突然變黑、上下鍵能動、但不知道怎么退出。這不是 bug是man的默認(rèn)閱讀器less在工作——它把幫助文檔當(dāng)“長文本”來處理而不是彈窗。你可以把它想象成一個極簡版的 PDF 閱讀器按空格鍵或CtrlF往下翻一頁按b鍵往上翻一頁按/鍵輸入關(guān)鍵詞搜索比如/hidden就能快速定位到關(guān)于隱藏文件的說明按q鍵立刻退出回到命令行——這是最重要的退出鍵務(wù)必記住。man ls執(zhí)行后你會看到一大段英文中文系統(tǒng)可能是中文但原理一樣。重點看開頭的 SYNOPSIS概要部分ls [OPTION]... [FILE]...這句話的意思是“l(fā)s后面可以跟零個或多個選項OPTION再跟零個或多個文件名FILE”。也就是說ls本身不帶任何參數(shù)就是列出當(dāng)前目錄加-a是加一個選項加-la是加兩個選項-l和-a可以合并后面再跟Documents就是只列出Documents這個目錄里的內(nèi)容。再看 DESCRIPTION描述里的一句話“List information about the FILEs (the current directory by default).” 列出 FILE 的信息若不指定 FILE則默認(rèn)列出當(dāng)前目錄。這就解釋了為什么你只敲ls就能看到當(dāng)前文件——因為“當(dāng)前目錄”是它的默認(rèn)動作。這種“默認(rèn)行為 可選參數(shù)”的設(shè)計是 Linux 命令的通用邏輯掌握了它學(xué)其他命令就快得多。2.3 管文件和目錄ls,pwd,mkdir,rm是你的“數(shù)字抽屜管理員”我們用一個生活場景來串起這四個命令假設(shè)你要整理自己的學(xué)習(xí)資料需要一個叫os_lab的新文件夾把實驗報告放進去然后確認(rèn)它建好了、位置對不對、里面有沒有東西。第一步確認(rèn)你在哪pwdpwd輸出類似/home/yourname—— 這就是你的“家目錄”所有個人文件默認(rèn)存這里。pwd就是“Print Working Directory”打印你當(dāng)前站在哪個“數(shù)字抽屜”里。第二步建新抽屜mkdirmkdir os_lab這行命令會在當(dāng)前目錄也就是你家目錄下新建一個叫os_lab的空文件夾。注意mkdir默認(rèn)只能建一層目錄。如果你想建os_lab/experiment1/report這種多層結(jié)構(gòu)得加-p參數(shù)mkdir -p os_lab/experiment1/report。第三步看看抽屜里有啥lsls你應(yīng)該能看到剛建的os_lab文件夾。如果想確認(rèn)它確實是文件夾而不是同名文件加-F參數(shù)ls -F文件夾名后面會自動加/比如os_lab/。第四步進抽屜看看cd雖然沒在摘要里但必須提cd os_lab pwd # 再次確認(rèn)現(xiàn)在路徑變成了 /home/yourname/os_lab第五步刪錯的抽屜rm和rmdir萬一建錯了名字比如打成os_lba想刪掉它如果是空文件夾rmdir os_lba如果里面有文件或者你想一步到位刪文件夾和里面所有東西rm -r os_lba-r表示 recursive遞歸刪除極其重要rm是“永久刪除”沒有回收站所以rm -r一定要先ls確認(rèn)目標(biāo)再敲回車。注意ls -a顯示隱藏文件是因為 Linux 里以.開頭的文件如.bashrc默認(rèn)不顯示。它們不是“病毒文件”而是系統(tǒng)或軟件的配置文件控制著你的終端顏色、別名、啟動腳本等。第一次看到ls -a列出一堆.開頭的文件別慌那是系統(tǒng)在悄悄幫你干活。3. 切換身份、掛載設(shè)備、編輯文件三個“跨域操作”讓你真正掌控系統(tǒng)權(quán)限和外部世界前一章講的是“看”和“管本地文件”這一章帶你邁出關(guān)鍵一步切換身份從普通用戶變成管理員、連接外部設(shè)備把 U 盤里的資料拿進來、編輯文本寫第一個 shell 腳本或 C 程序。這三件事共同構(gòu)成了 Linux 的“邊界感”——它明確區(qū)分“我的地盤”“系統(tǒng)地盤”“別人的東西”而你每次操作都在和這個邊界打交道。理解它們你就不再覺得 Linux 是“一堆命令”而是一個有規(guī)則、有邏輯、可預(yù)測的協(xié)作系統(tǒng)。3.1 切換身份sudo不是“開掛”而是“臨時借鑰匙”的安全協(xié)議實驗總結(jié)里反復(fù)強調(diào)不要直接用 root 用戶登錄。為什么因為 root 就像一把萬能鑰匙能打開系統(tǒng)里每一扇門——包括/etc/passwd用戶數(shù)據(jù)庫、/boot啟動文件、甚至/根目錄本身。一個手滑的rm -rf /雖然現(xiàn)代系統(tǒng)已加保護但類似誤操作仍可能癱瘓系統(tǒng)后果就是重裝系統(tǒng)。所以 Linux 設(shè)計了sudo它不給你鑰匙而是讓你“申請一次授權(quán)”辦完事鑰匙就收回。sudo mkdir /opt/myapp執(zhí)行這行系統(tǒng)會提示你輸入當(dāng)前用戶的密碼不是 root 密碼輸對后mkdir這條命令就以 root 權(quán)限運行成功在/opt下建目錄。之后五分鐘內(nèi)你再敲任何sudo命令都不用輸密碼——這是sudo的“信任窗口”既省事又安全。提示sudo的核心原則是“最小權(quán)限”。比如你想裝軟件用sudo apt install vim但你想改自己家目錄下的.bashrc完全不需要sudo直接nano ~/.bashrc就行。濫用sudo就像用消防斧切水果——能切但沒必要還容易傷手。3.2 掛載 U 盤mount不是“插上就用”而是“告訴系統(tǒng)這塊硬盤請按這個規(guī)則解讀”U 盤插上電腦Linux 不會自動把它變成D:盤。它先識別為一塊“裸設(shè)備”比如/dev/sdb然后你需要告訴系統(tǒng)“這塊設(shè)備上的第一個分區(qū)sdb1用 FAT32 文件系統(tǒng)格式存的數(shù)據(jù)請掛載到/mnt這個目錄下讓我能訪問”。這個“告訴”的過程就是mount。# 1. 先確認(rèn) U 盤設(shè)備名通常 sdb, sdc取決于你插了幾塊 lsblk # 2. 創(chuàng)建掛載點/mnt 是系統(tǒng)預(yù)設(shè)的臨時掛載目錄 sudo mkdir -p /mnt/usb # 3. 掛載指定設(shè)備、文件系統(tǒng)類型、掛載點 sudo mount -t vfat /dev/sdb1 /mnt/usb # 4. 現(xiàn)在就可以訪問了 ls /mnt/usb這里-t vfat很關(guān)鍵它告訴系統(tǒng)“這塊盤用的是 Windows 兼容的 FAT32 格式”這樣讀寫才不會亂碼。如果你的 U 盤是 NTFS 格式就得換成-t ntfs如果是 Linux 原生的 ext4就用-t ext4。mount的本質(zhì)就是建立“設(shè)備 ? 文件系統(tǒng) ? 掛載點”三者的映射關(guān)系。卸載時用sudo umount /mnt/usb注意是umount不是unmount務(wù)必先卸載再拔 U 盤否則數(shù)據(jù)可能損壞。3.3 編輯文件vi/vim不是“難用的古董”而是“鍵盤即畫布”的高效文本工作流vi及其增強版vim是 Linux 終端里最主流的編輯器。新手怕它是因為它有“模式”普通模式移動光標(biāo)、刪行、插入模式打字、命令模式保存、退出。但這恰恰是它的效率來源——不用鼠標(biāo)手指不離主鍵盤區(qū)就能完成所有操作。我們用一個真實例子寫一個最簡單的 shell 腳本讓它打印“Hello, OS Lab!”。# 1. 進入 os_lab 目錄 cd ~/os_lab # 2. 用 vim 創(chuàng)建 hello.sh vim hello.sh此時進入vim的普通模式光標(biāo)是方塊不能直接打字。按i鍵進入插入模式輸入#!/bin/bash echo Hello, OS Lab!按Esc鍵退出插入模式回到普通模式。然后輸入:wq冒號小寫 wq回車——意思是“write and quit”保存并退出。搞定提示vim的入門口訣就三句i進入編輯insertEsc回到命令command:wq保存退出write quit。其他都可后續(xù)學(xué)。別被網(wǎng)上那些“vim 快捷鍵大全”嚇住先用這三招一周后你就會發(fā)現(xiàn)vim比圖形編輯器快得多。4. 編譯運行 C 程序從寫代碼到看見結(jié)果走通 Linux 編程界面的完整閉環(huán)很多新手學(xué) Linux卡在“寫了代碼卻不知道怎么讓它跑起來”。C 語言在 Linux 上的編譯運行不是點一下“運行”按鈕那么簡單而是一套清晰的四步流程寫edit→ 編譯compile→ 鏈接link→ 執(zhí)行execute。這四步就是 Linux 編程界面的核心骨架。理解它你才能明白為什么要有.c文件、.o文件、a.out以及gcc到底在后臺干了什么。4.1 寫代碼用 vim 創(chuàng)建一個標(biāo)準(zhǔn)的 C “Hello World”我們繼續(xù)在~/os_lab目錄下操作vim hello.c進入vim按i輸入以下標(biāo)準(zhǔn) C 程序#include stdio.h int main() { printf(Hello, OS Lab from C!\n); return 0; }按Esc再輸入:wq保存退出。注意#include stdio.h是必須的它告訴編譯器“我要用printf這個函數(shù)它的定義在標(biāo)準(zhǔn)輸入輸出頭文件里”。漏掉這行編譯會報錯undefined reference to printf——不是代碼錯是“沒告訴編譯器去哪里找函數(shù)”。4.2 編譯gcc不是“一鍵生成”而是分階段工作的“流水線工人”gcc hello.c敲下回車沒報錯也沒看到新文件等等——它其實默默生成了一個叫a.out的可執(zhí)行文件。gcc默認(rèn)行為就是把hello.c編譯、鏈接輸出到a.out。但為了更清楚每一步我們拆開來看# 1. 預(yù)處理展開 #include, #define gcc -E hello.c -o hello.i # 2. 編譯轉(zhuǎn)成匯編代碼 gcc -S hello.i -o hello.s # 3. 匯編轉(zhuǎn)成機器碼生成 .o 目標(biāo)文件 gcc -c hello.s -o hello.o # 4. 鏈接把 .o 和系統(tǒng)庫打包成可執(zhí)行文件 gcc hello.o -o hello最終你得到一個叫hello的可執(zhí)行文件不是a.out了。這四步就是完整的編譯流程。日常開發(fā)中我們直接用gcc hello.c -o hello一步到位但理解分步能幫你精準(zhǔn)定位問題比如預(yù)處理出錯說明頭文件路徑不對鏈接出錯說明函數(shù)名拼錯了或沒加-lm數(shù)學(xué)庫。4.3 執(zhí)行./不是“多此一舉”而是 Linux 的安全沙箱機制編譯成功后你以為hello就能直接運行試試hello # bash: hello: command not found報錯了因為 Linux 默認(rèn)不把當(dāng)前目錄.加入命令搜索路徑$PATH。這是安全設(shè)計防止你無意中運行了當(dāng)前目錄下同名的惡意程序比如有人放了個叫l(wèi)s的木馬。所以正確做法是./hello./的意思是“請在當(dāng)前目錄dot slash下找這個叫hello的文件并執(zhí)行它”。這就是 Linux 的“顯式路徑”哲學(xué)——不做猜測只做你明確說的事。提示./是新手最容易忘的符號。記住口訣“編譯生成的可執(zhí)行文件運行前必須加./”。它不是 bug是 feature。5. 常見問題排查新手必踩的 5 個坑現(xiàn)象、原因、解法全寫清楚剛上手 Linux不是代碼寫錯而是環(huán)境、權(quán)限、路徑這些“看不見的墻”在擋路。下面這 5 個問題是我?guī)н^幾十個零基礎(chǔ)同學(xué)后統(tǒng)計出的最高頻“翻車現(xiàn)場”。每一條都按“你看到什么 → 為什么發(fā)生 → 怎么立刻解決”來寫照著做5 分鐘內(nèi)就能救活你的終端。5.1 現(xiàn)象sudo: command not found原因你的用戶沒被加入sudo用戶組或者系統(tǒng)壓根沒裝sudo極少見但某些精簡版系統(tǒng)會有。解決先確認(rèn)你是不是標(biāo)準(zhǔn)用戶whoami應(yīng)該輸出你的用戶名不是root然后切換到 root 用戶如果你知道 root 密碼su -輸入 root 密碼在 root 下執(zhí)行usermod -aG sudo your_username把your_username換成你自己的用戶名退出 rootexit重新登錄你的用戶或新開一個終端sudo就生效了。5.2 現(xiàn)象ls: cannot access xxx: No such file or directory原因你輸入的文件名或路徑有拼寫錯誤或者大小寫錯了Linux 區(qū)分大小寫Report.txt≠report.txt。解決先ls看當(dāng)前目錄下到底有什么用Tab鍵自動補全輸入ls rep然后按Tab如果系統(tǒng)有report.txt它會自動補成ls report.txt如果不確定路徑用絕對路徑ls /home/yourname/os_lab/避免相對路徑搞混。5.3 現(xiàn)象vim里按了i卻不能打字或者按Esc沒反應(yīng)原因vim有三種模式你可能卡在“命令模式”或“末行模式”但沒意識到。解決無腦按Esc三次確?;氐狡胀J皆侔磇應(yīng)該能進入插入模式左下角出現(xiàn)-- INSERT --如果還是不行關(guān)掉重開CtrlC強制退出vim有時卡死再vim filename記住鐵律Esc是你的“安全鍵”任何時候按它都能回到可控狀態(tài)。5.4 現(xiàn)象gcc hello.c后./a.out報錯Permission denied原因生成的a.out沒有“可執(zhí)行權(quán)限”。Linux 文件有 r讀、w寫、x執(zhí)行三類權(quán)限gcc默認(rèn)只給rw不給x。解決查看權(quán)限ls -l a.out輸出類似-rw-r--r-- 1 user user 12345 Jan 1 10:00 a.out注意開頭沒有x加執(zhí)行權(quán)限chmod x a.out再運行./a.out。提示以后編譯時直接指定輸出名并加權(quán)限gcc hello.c -o hello chmod x hello一步到位。5.5 現(xiàn)象U 盤掛載后ls /mnt/usb顯示空或者中文文件名是亂碼原因掛載時沒指定正確的字符編碼codepage和 I/O 編碼iocharset。FAT32 U 盤在 Windows 下默認(rèn)用 GBK 編碼存中文Linux 默認(rèn)用 UTF-8不匹配就亂碼。解決卸載sudo umount /mnt/usb重新掛載指定編碼sudo mount -t vfat -o iocharsetutf8,codepage936 /dev/sdb1 /mnt/usb其中codepage936對應(yīng) GBKiocharsetutf8告訴 Linux 用 UTF-8 解釋。掛載后ls就能正常顯示中文了。6. 下一步學(xué)什么從“能跑通”到“真理解”一條平滑升級的學(xué)習(xí)路徑走到這一步你已經(jīng)能獨立完成實驗報告里的所有基礎(chǔ)操作查系統(tǒng)、看幫助、管文件、切用戶、掛 U 盤、寫 vim、編譯 C、運行腳本。但這只是起點。真正的 Linux 能力不在于你會多少命令而在于你能否把零散操作組織成解決實際問題的“自動化流程”。下面這條路徑是我自己從“只會抄命令”到“能寫運維腳本”的血淚經(jīng)驗也是我?guī)氯藭r驗證過最平滑的升級路線——不堆概念每一步都對應(yīng)一個你能立刻動手的小項目。6.1 第一階段用 shell 腳本把重復(fù)操作“固化下來”13 天你現(xiàn)在手動敲gcc hello.c -o hello chmod x hello ./hello三步。但如果每天要編譯 10 個文件呢這時候shell 腳本就是你的“快捷方式生成器”。動手任務(wù)寫一個build.sh讓它自動編譯當(dāng)前目錄下所有.c文件并運行結(jié)果。#!/bin/bash # build.sh批量編譯并運行當(dāng)前目錄的 C 程序 for file in *.c; do if [ -f $file ]; then echo 編譯 $file gcc $file -o ${file%.c} 2/dev/null if [ $? -eq 0 ]; then echo ? 編譯成功正在運行... ./${file%.c} else echo ? 編譯失敗$file fi fi done保存為build.shchmod x build.sh然后./build.sh。它會遍歷所有.c文件挨個編譯、運行。${file%.c}是 Bash 的參數(shù)擴展自動去掉.c后綴生成對應(yīng)可執(zhí)行名。這個小腳本就是你邁向自動化編程的第一步。6.2 第二階段用make管理復(fù)雜項目的依賴關(guān)系35 天當(dāng)項目變大比如main.c依賴utils.c和utils.h改了utils.c你不想每次都手動gcc main.c utils.c -o app。make就是為此而生的“智能構(gòu)建管家”。動手任務(wù)為上面的hello.c寫一個Makefile# Makefile CC gcc CFLAGS -Wall -g hello: hello.o $(CC) $(CFLAGS) hello.o -o hello hello.o: hello.c $(CC) $(CFLAGS) -c hello.c -o hello.o clean: rm -f hello hello.o .PHONY: clean然后只需make自動編譯、make clean清理make會根據(jù)文件修改時間只重新編譯被改動的部分。這才是工程級的編譯管理。6.3 第三階段用gdb調(diào)試 C 程序看清代碼“怎么一步步跑的”57 天printf大法好但遇到段錯誤Segmentation fault或邏輯錯就得用調(diào)試器。gdb就是 C 程序的“慢動作回放器”。動手任務(wù)給hello.c加個 bug然后用gdb定位#include stdio.h int main() { int *p NULL; // 故意讓指針為空 printf(Hello before crash\n); *p 10; // 這里會段錯誤 printf(Hello after crash\n); return 0; }編譯時加-ggcc -g hello.c -o hello啟動調(diào)試gdb ./hello在gdb里(gdb) run # 運行會停在段錯誤處 (gdb) bt # backtrace看調(diào)用棧 (gdb) list # 顯示出錯附近的源碼 (gdb) print p # 打印指針值確認(rèn)是 NULL你立刻就知道*p 10這一行試圖往空地址寫數(shù)據(jù)所以崩了。這才是真正的“看見問題”。6.4 第四階段理解進程與信號寫出能響應(yīng) CtrlC 的程序710 天Linux 里CtrlC不是“關(guān)閉程序”而是發(fā)送SIGINT信號。一個健壯的程序應(yīng)該能捕獲它做清理再退出而不是直接崩掉。動手任務(wù)改寫hello.c讓它收到CtrlC時優(yōu)雅退出#include stdio.h #include signal.h #include stdlib.h void handle_sigint(int sig) { printf(\n 收到 CtrlC正在退出...\n); exit(0); } int main() { signal(SIGINT, handle_sigint); // 注冊信號處理器 printf(程序運行中按 CtrlC 退出...\n); while(1) { sleep(1); // 每秒循環(huán)一次避免占滿 CPU } return 0; }編譯運行后按CtrlC它會打印告別語再退出。你第一次親手“攔截”了系統(tǒng)信號這就是系統(tǒng)編程的入口。從那以后我每次寫 C 程序只要涉及循環(huán)或等待都會習(xí)慣性加上signal()處理SIGINT和SIGTERM每次寫腳本第一行必是#!/bin/bash第二行必是set -e出錯立即停止每次gcc必加-Wall -g。這些不是教條而是無數(shù)個Segmentation fault和Permission denied教會我的肌肉記憶。希望幫到你。本文還有配套的精品資源點擊獲取