[英]Bash Script to kill linux processes not coming back to terminal
我是 Linux 環境的新手,正在編寫腳本來啟動和停止一些服務(nodejs 應用程序使用“pkg”模塊捆綁到可執行文件中)。 我想按名稱停止進程並找到“killall”命令。 我在 bash 腳本中單獨嘗試了這個命令。 我面臨的問題是,執行 kill 命令后,控制權不會返回到終端,我需要使用 ctrl+c 來恢復終端。
這是我嘗試過的腳本:
#!/bin/bash
# Run with command : chmod +x /root/myApp/stopserv.sh && /root/myApp/stopserv.sh
echo "Stopping Service1"
nohup killall Service1 &>/dev/null &
echo "Stopping Service2"
nohup killall Service2 &>/dev/null &
echo "Stopping Service3"
nohup killall Service3 &>/dev/null &
echo "Stopping Service4"
nohup killall Service4 &>/dev/null &
當我運行這個腳本時,我會在終端上得到如下響應:
root@Phantom-E03E:~/myApp# chmod +x /root/myApp/stopserv.sh && /root/myApp/stopserv.sh
Stopping Service1
Stopping Service2
Stopping Service3
Stopping Service4
root@Phantom-E03E:~/myApp# /root/myApp/startserv.sh: line 17: 29535 Terminated nohup ./Service1 &> /dev/null
/root/myApp/startserv.sh: line 11: 29533 Terminated nohup ./Service2-linux &> /dev/null
/root/myApp/startserv.sh: line 14: 29534 Terminated nohup ./Service3-linux &> /dev/null
/root/myApp/startserv.sh: line 8: 29527 Terminated nohup ./Service4-linux &> /dev/null
我想檢查:
謝謝,普加
只需像這樣調用腳本:
<path_to_script> && exit
你可以做得更好。 實際上你可以通過兩種方式做到這一點
1.使用前后台機制
2.使用systemd-服務管理(有點復雜)
當我們使用 shell (?bash) 運行進程時,它將與我們的終端交互。 我們可以通過以下方式管理這種交互性
您可以手動使用這種方式,也可以使用腳本。 我會展示兩者。
這是手動執行的屏幕截圖
這是一個簡單的腳本
#!/bin/bash
APP_STATE=$1;
APP_NAME=$2;
# TASKS=( cont stop );
function stop_app(){
APP_PID=$(pidof $APP_NAME);
kill -n 19 $APP_PID;
if [[ $? == '0' ]]; then
echo "$APP_NAME paused!";
else
echo "could not pause $APP_NAME";
fi
}
function continue_app(){
APP_PID=$(pidof $APP_NAME);
kill -n 18 $APP_PID;
if [[ $? == '0' ]]; then
echo "$APP_NAME continued ...";
else
echo "could not continue $APP_NAME";
fi
}
case $APP_STATE in
cont )
continue_app ;;
stop )
stop_app ;;
esac
和運行此腳本的屏幕截圖
注意bg和fg是接口,您可以使用kill
命令通過發送停止信號和繼續信號在較低級別執行此操作,我的腳本以這種方式執行此操作。
>>> 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
請注意信號18和19 。
要通過名稱簡單地殺死進程,請使用pkill
命令。
對於復雜的管理,請查看/etc/systemd/system
目錄
如果您有一個Node.js服務器啟動並運行並且它的管理使用pm2或 systemd
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.