守護程序1 tmux

2021-10-02 11:06:41 字數 2594 閱讀 8465

一般要在伺服器上做一些花裡胡哨的操作時,都是開啟終端(如果是遠端伺服器,則還需要通過ssh連線下)在上面操作。你會發現當你的ssh斷開或關閉terminal時,你在上面臨時執行的程式也停掉了,這是為什麼呢,今天就來討論下這個問題。

關於終端和shell的來由說起來就話長了,這裡不做贅述,可以看下這篇文章linux cygwin知識庫(一):一文搞清控制台、終端、shell概念

簡單來說:terminal是幫你輸入和顯示命令結果的,shell是幫你執行命令的。

從程序會話的角度來說,它們的包含關係如下:

a.out是乙個示例程式:

main()

;}

gcc編譯後,把它執行起來,看下它的pid,ppid,gid,sid

# pidof a.out

28505

# ps -c a.out -o pid,ppid,gid,sid

pid ppid gid sid

28505 28266 0 28266

可以看到ppid和sid是同乙個,是bash

# ps aux | grep 28266

root 28266 0.0 0.0 22872 5436 pts/0 ss 14:37 0:00 -bash

再看下bash的ppid,以及它對應的程序,可以看到是sshd(我這裡是通過ssh連線操作的伺服器)

# ps -ef | grep bash

root 28266 28165 0 14:37 pts/0 00:00:00 -bash

# ps -ef | grep 28165

root 28165 1354 0 14:37 ? 00:00:00 sshd: root@pts/0

當關閉a.out的終端時可以看到a.out也沒有執行了,而現實的場景中肯定會遇到要守護程序的方式,即終端關掉以後程式可以繼續執行。在linux下常見的有daemon,systemed,nohup,後續會一一介紹這些,這裡先介紹乙個工具tmux。

在ubuntu下安裝

apt-get install tmux
在centos下安裝

yum install tmux
安裝完成後,直接執行tmux命令即可進入

此時執行a.out,然後關閉該終端,可以看到a.out還在執行:

# ps aux  | grep a.out

root 29299 0.0 0.0 4508 712 pts/2 s+ 15:10 0:00 ./a.out

看下它的父程序:

root@lan-dev-215:~/test# ps -ef | grep 29272

root 29272 29271 0 15:10 pts/2 00:00:00 -bash

root 29299 29272 0 15:10 pts/2 00:00:00 ./a.out

root 29333 28266 0 15:12 pts/0 00:00:00 grep --color=auto 29272

root@lan-dev-215:~/test# ps -ef | grep 29271

root 29271 1 0 15:10 ? 00:00:00 tmux

root 29272 29271 0 15:10 pts/2 00:00:00 -bash

root 29344 28266 0 15:12 pts/0 00:00:00 grep --color=auto 29271

可以看到對應的bash是tmux啟動的,我們把tmux殺掉看會怎麼樣

root@lan-dev-215:~/test# kill -9 29271

root@lan-dev-215:~/test# ps -ef | grep 29271

root 29384 28266 0 15:14 pts/0 00:00:00 grep --color=auto 29271

root@lan-dev-215:~/test# ps -ef | grep a.out

root 29387 28266 0 15:14 pts/0 00:00:00 grep --color=auto a.out

root@lan-dev-215:~/test# ps -ef | grep tmux

root 29390 28266 0 15:14 pts/0 00:00:00 grep --color=auto tmux

可以看到a.out也沒了。

到這裡我們就明白了:tmux是乙個守護程序,不受terminal的影響,從而保證了在它上面執行的程式可以繼續執行。

tmux還有非常多的功能,詳細了解可以看這裡

Redhat Linux 守護程序列表 1

守護程序列表 1.networkmanager 2.acpid acpid advanced configuration and power inte ce 是為替代傳統的 apm電源管理標準而推出的新型電源管理標準。通常膝上型電腦需要啟動電源進行管理。3.amanda 4.amd 自動安裝 nfs...

守護程序及守護程序輸出

1 建立乙個輸出程式 2 建立乙個守護程序 1 建立乙個輸出程式 守護程序不與終端聯絡,所以,需要另外建立乙個程式用於輸出。也可以直接使用 bin echo example daemon help.cc include int main int argc,char argv else if argc...

守護程序及守護程序輸出

1 建立乙個輸出程式 2 建立乙個守護程序 1 建立乙個輸出程式 守護程序不與終端聯絡,所以,需要另外建立乙個程式用於輸出。也可以直接使用 bin echo example daemon help.cc include int main int argc,char ar else if argc 2...