Bash
Ctrl-C 和 kill -INT 的區別?
我在 C++ 程序中有一個信號處理程序:
void term(int signum) { cout << "in term" << endl; # Do Stuff exit(0); } int main(int argc, char *argv[]) { # Do Stuff signal(SIGINT, term); # Do Stuff }
該程序執行良好。
Ctrl+C
當我按下並退出時進入函式項。但是,當我嘗試使用腳本複制該行為時,它不起作用。
我正在執行的腳本的簡化版本:
! /bin/bash sudo ./program & rpid=$! sleep 2 sudo kill -INT $rpid # sudo kill -TERM $rpid # sudo kill $rpid echo "killed" wait $rpid
在我按下 之前,該程序甚至不會進入術語功能
Ctrl+C
。它無限期地等待。
% sudo sh -c 'exec echo 我的程序 ID 是 $$。' & echo "Xyr 程序 ID 是 $\!." ; 等待 [1] 59130 Xyr 程序 ID 為 59130。 我的程序 ID 是 59131。 [1] + done sudo sh -c 'exec echo 我的程序 ID 是 $$。' %
歡迎來到可插拔認證模組的世界!
login
、su
和之類的程序sudo
不再與目標程序重疊。您將信號發送到錯誤的程序。
進一步閱讀
- 喬納森·德博因·波拉德 (2014)。 “二十多年前,PAM 改變了一切。” . 不要濫用 su 刪除使用者權限。經常給出答案。
- 如何sudo + exec?