系統調用是用戶態程序請求內核服務的唯一接口。本文依據 man pages 第 2 節,將 300+ 系統調用按功能域分為八大類,附上中文註釋與典型使用場景,供系統程序員、內核開發者、運維工程師查閱。
| 調用 | 功能 | 典型場景 |
|---|---|---|
| fork() | 創建子進程 (複製地址空間) | 並發服務器、Shell |
| clone() | 細粒度創建線程/進程 | pthread_create 底層實現 |
| vfork() | 創建子進程共享地址空間 | 緊接 exec 時優化 |
| execve() | 加載執行新程式 | 所有 exec 族函數最終調用 |
| exit() / _exit() | 正常/立即終止進程 | _exit 繞過 stdio 清理 |
| wait() / waitpid() / wait4() | 等待子進程狀態變化 | 回收殭屍進程 |
| getpid() / getppid() | 獲取進程/父進程 ID | 日誌標識、鎖文件命名 |
| getuid() / geteuid() / getgid() / getegid() | 獲取真實/有效 用戶/組 ID | 權限檢查 |
| setuid() / setgid() / setreuid() / setregid() | 設置用戶/組 ID | 特權降權、Setuid 程序 |
| getpriority() / setpriority() | 獲取/設置調度優先級 | nice 值調整 |
| nice() | 修改分時進程優先級 | 舊版兼容 |
| sched_* 系列 | 實時調度策略/參數設置 | SCHED_FIFO/RR/DEADLINE |
| nanosleep() | 高精度休眠 | 定時任務、限流 |
| pause() | 掛起等待信號 | 信號驅動主循環 |
| ptrace() | 進程跟蹤 | 調試器、strace 實現 |
| prctl() | 進程特定操作 (名稱、seccomp、cap 等) | 設置進程名、限制系統調用 |
| capget() / capset() | 獲取/設置進程能力 | 最小特權原則 |
| personality() | 設置進程執行域 (兼容模式) | 運行舊版二進制 |
| getsid() / setsid() | 獲取/創建會話 | 守護進程脫離終端 |
| modify_ldt() | 讀寫局部描述符表 | 線程局部存儲 (TLS) 底層 |
| 調用 | 功能 | 備註 |
|---|---|---|
| open() / creat() | 打開/創建文件 | 返回 FD |
| close() | 關閉文件描述符 | |
| read() / write() | 讀/寫文件 | 阻塞 I/O 基礎 |
| pread() / pwrite() | 隨機讀寫 (不改偏移量) | 多線程並發讀寫同一文件 |
| readv() / writev() | 分散/聚集 I/O | 單次系統調用處理多緩衝區 |
| lseek() / _llseek() | 移動文件偏移量 | _llseek 64 位偏移 |
| dup() / dup2() / dup3() | 複製文件描述符 | I/O 重定向核心 |
| fcntl() | 文件控制 (鎖、FD 旗標、異步 I/O) | F_GETFL, F_SETFD, F_SETLK |
| flock() | 文件建議性鎖 | 整文件鎖,跨進程可見 |
| poll() / select() / epoll_*() | I/O 多路複用 | epoll 為 Linux 高性能網路核心 |
| fsync() / fdatasync() | 強制寫回磁碟 | 數據持久化保證 |
| sync() | 全系統緩衝區回寫 | |
| truncate() / ftruncate() | 截斷文件長度 | |
| umask() | 設置文件創建掩碼 | 影響 open(mode) 權限 |
| 調用 | 功能 | 備註 |
|---|---|---|
| stat() / lstat() / fstat() | 獲取文件狀態 (inode 信息) | lstat 不跟隨符號鏈接 |
| chmod() / fchmod() | 修改文件權限 | |
| chown() / fchown() / lchown() | 修改文件屬主/組 | |
| mkdir() / rmdir() | 創建/刪除目錄 | |
| link() / unlink() / linkat() / unlinkat() | 創建/刪除硬鏈接 | at 版本支援目錄 FD 相對路徑 |
| symlink() / readlink() | 創建/讀取符號鏈接 | |
| rename() / renameat() | 重命名/移動文件 | 原子操作 |
| chdir() / fchdir() / getcwd() | 改變/獲取工作目錄 | |
| mknod() / mknodat() | 創建特殊文件 (設備、FIFO) | |
| mount() / umount() / umount2() | 掛載/卸載文件系統 | 需 CAP_SYS_ADMIN |
| statfs() / fstatfs() / ustat() | 獲取文件系統信息 | 磁碟空間、inode 統計 |
| getdents() / readdir() | 讀取目錄項 | ls 實現基礎 |
| quotactl() | 磁碟配額控制 | |
| utime() / utimes() / utimensat() | 修改文件時間戳 | at 版本支援納秒精度 |
| chroot() | 改變根目錄 | 容器隔離前身 |
| pivot_root() | 切換根文件系統 | initramfs 切換實際根目錄 |
| 調用 | 功能 | 備註 |
|---|---|---|
| ioctl() | 設備 I/O 控制 (萬能介面) | 網卡配置、磁碟查詢、聲音控制 |
| _sysctl() / sysctl() | 讀寫內核參數 (/proc/sys) | 網路參數調優 |
| reboot() | 重啟/關機/掛起 | 需 CAP_SYS_BOOT |
| swapon() / swapoff() | 啟用/關閉交換分區 | |
| bdflush() | 控制 pdflush 守護進程 | 舊版,現由 writeback 子系統管理 |
| sysfs() | 獲取內核支援文件系統類型 | |
| sysinfo() | 獲取系統信息 (內存、負載、uptime) | top/htop 數據源 |
| adjtimex() | 精密調整系統時鐘 | NTP 守護進程使用 |
| alarm() / getitimer() / setitimer() | 進程定時器 (真實/虛擬/剖析) | SIGALRM/SIGVTALRM/SIGPROF |
| gettimeofday() / settimeofday() | 獲取/設置時間 (微秒精度) | time() 秒級替代 |
| clock_gettime() / clock_settime() | 高精度時鐘 (納秒、單調時鐘) | CLOCK_MONOTONIC 計時首選 |
| uname() | 獲取系統標識 (內核版本、架構) | |
| vhangup() | 虛擬掛起終端 | 登出清理 |
| nfsservctl() | NFS 守護進程控制 | |
| vm86() | 進入 8086 模擬模式 | DOSEMU、舊 BIOS 調用 |
| create_module() / init_module() / delete_module() / query_module() | 內核模塊管理 (舊版) | 現用 finit_module() 等 |
| 調用 | 功能 | 備註 |
|---|---|---|
| brk() / sbrk() | 擴展/縮減堆頂端 | malloc 底層實現之一 |
| mmap() / munmap() | 映射/解除映射虛擬內存 | 文件映射、匿名映射、共享內存 |
| mremap() | 擴展/移動映射區域 | 動態調整映射大小 |
| mprotect() | 設置內存保護 (讀/寫/執行) | JIT 編譯、守衛頁 |
| msync() | 映射內存回寫磁碟 | MS_SYNC/MS_ASYNC |
| mlock() / munlock() / mlockall() / munlockall() | 鎖定/解鎖內存頁面 (防換出) | 實時系統、加密密鑰保護 |
| getpagesize() | 獲取頁面大小 (通常 4096) | |
| mincore() | 查詢頁面是否駐留內存 | 頁面緩存分析 |
| madvise() | 預告內存訪問模式 | MADV_RANDOM/SEQUENTIAL/WILLNEED |
| shmget() / shmat() / shmdt() / shmctl() | System V 共享內存 | IPC 鍵值識別 |
| 調用 | 功能 |
|---|---|
| gethostname() / sethostname() | 獲取/設置主機名 |
| getdomainname() / setdomainname() | 獲取/設置 NIS/YP 域名 |
| gethostid() / sethostid() | 獲取/設置主機 ID |
| 調用 | 功能 | 備註 |
|---|---|---|
| socket() / socketpair() | 創建套接字/套接字對 | AF_INET, AF_UNIX, SOCK_STREAM/DGRAM |
| bind() | 綁定地址/埠 | |
| listen() | 監聽連接請求 | backlog 參數影響 |
| accept() / accept4() | 接受連接 | accept4 可設置 SOCK_NONBLOCK/CLOEXEC |
| connect() | 發起連接 | |
| send() / sendto() / sendmsg() | 發送數據 | sendmsg 支援控制數據 (SCM_RIGHTS 傳 FD) |
| recv() / recvfrom() / recvmsg() | 接收數據 | |
| shutdown() | 關閉連接單向/雙向 | SHUT_RD/WR/RDWR |
| getsockname() / getpeername() | 獲取本地/對端地址 | |
| getsockopt() / setsockopt() | 獲取/設置套接字選項 | SO_REUSEADDR, TCP_NODELAY, SO_RCVBUF |
| sendfile() / splice() / tee() / vmsplice() | 零拷貝文件/管道傳輸 | 高性能文件傳輸核心 |
| getsockopt(TCP_INFO) | 獲取 TCP 連接狀態詳細信息 | RTT、重傳、擁塞窗口等 |
| 調用 | 功能 |
|---|---|
| getuid() / geteuid() / getgid() / getegid() | 獲取真實/有效 UID/GID |
| setuid() / seteuid() / setreuid() / setresuid() | 設置 UID (真實/有效/保存) |
| setgid() / setegid() / setregid() / setresgid() | 設置 GID |
| getgroups() / setgroups() | 獲取/設置補充組列表 |
| setfsuid() / setfsgid() | 設置文件系統檢查用 UID/GID |
見《Linux 信號機制深度解析》一文。
| 調用 | 功能 | 對象 |
|---|---|---|
| msgget() / msgctl() / msgsnd() / msgrcv() | 消息隊列 | 結構化數據傳遞 |
| semget() / semctl() / semop() | 信號量集 | 同步、互斥、資源計數 |
| shmget() / shmctl() / shmat() / shmdt() | 共享內存 | 最高速 IPC,需自行同步 |
| 調用 | 功能 | 備註 |
|---|---|---|
| pipe() / pipe2() | 創建匿名管道 | pipe2 可設置 O_CLOEXEC/NONBLOCK |
| eventfd() / eventfd2() | 事件計數器 FD | 線程/進程事件通知,極輕量 |
| signalfd() | 信號轉為 FD | 統一事件循環處理信號 |
| timerfd_create() / timerfd_settime() | 定時器 FD | epoll 整合定時任務 |
| inotify_init() / inotify_add_watch() | 文件系統事件監聽 | 配置熱加載、自動構建 |
| fanotify_init() / fanotify_mark() | 全局文件訪問監控 | 防毒、備份、合規審計 |
Linux 系統調用總數超 300 (x86_64 為 330+),但核心高頻僅 50~80 個。按「進程、文件、內存、網路、IPC、系統、用戶、時間」八大域分類建立知識圖譜,配合 `man 2 syscall`、`strace`、`bcc/ebpf` 觀測實際調用鏈,是精通 Linux 系統編程的捷徑。*標記調用已废弃或仅供内核内部使用,新代码请使用替代接口。*