SCP使用SIGSTOP後臺執行並簡單討論孤兒程式殭屍程式

gaopengtttt發表於2016-02-24
關於LINUX SCP後臺執行


1、進入會話後
scp  -P 31079 gaopeng@10.10.10.1:/home/gaopeng/yjf_openapi.sql.gz yjf_openapi.sql.gz
輸入密碼,程式前臺執行
2、發出CTRL+Z 訊號 SIGSTOP
[1]+  Stopped                 scp -P 31079 gaopeng@10.10.10.1:/home/gaopeng/yjf_openapi.sql.gz yjf_openapi.sql.gz
3、檢視JOBS
[root@dyzsdb2 ~]# jobs
[1]+  Stopped                 scp -P 31079 gaopeng@10.10.10.1:/home/gaopeng/yjf_openapi.sql.gz yjf_openapi.sql.gz
4、使用bg 1命令
然後job 1後臺執行
5、關閉SHELL 視窗再次檢視
root     16297     1  0 16:54 ?        00:00:01 scp -P 31079 gaopeng@10.10.10.1:/home/gaopeng/yjf_openapi.sql.gz yjf_openapi.sql.gz


這個時候可以看到我的SCP程式PPID 是1,由INIT 1,我們的SCP程式成為了孤兒程式由INIT程式接管,但是SCP繼續執行沒有問題




這裡簡單說明一下概念:
1、當我們連線到LINUX後建立一個的第一個程式就是SHELL程式
init─┬─abrt-dump-oops
     ├─abrtd
     ├─acpid
     ├─atd
     ├─auditd───{auditd}
     ├─automount───4*[{automount}]
     ├─certmonger
     ├─crond
     ├─cupsd
     ├─dbus-daemon───{dbus-daemon}
     ├─hald───hald-runner─┬─hald-addon-acpi
     │                    └─hald-addon-inpu
     ├─irqbalance
     ├─master─┬─pickup
     │        └─qmgr
     ├─mcelog
     ├─6*[mingetty]
     ├─mysqld_safe───mysqld───54*[{mysqld}]
     ├─mysqld_safe───mysqld───444*[{mysqld}]
     ├─rpc.idmapd
     ├─rpc.statd
     ├─rpcbind
     ├─rsyslogd───3*[{rsyslogd}]
     ├─scp───ssh
     ├─sshd───sshd───bash───pstree
     └─udevd───2*[udevd]
我們可以使用PSTREE 簡單的看一下 
├─sshd───sshd───bash───pstree
可以看到,我們SHELL程式實際是由SSHD程式FORK出來,而SSHD是由INIT FORK出來。
而我們使用SCP的時候實際就是├─sshd───sshd───bash───SCP SCP由BASH FORK出來
這個時候我們發出了CTRL+Z的SIGSTOP訊號來STOP了程式SCP 然後使用bg命令來在後臺程式
這個時候我們推出了SHELL程式那麼
├─sshd───sshd───bash───SCP 
bash就沒有了 SCP成了沒有父親的孤兒程式,LINUX系統所有的孤兒程式由INIT接管。


父程式對所有的子程式都是起著監控執行狀態和結束後回收資源的作用,如果父程式在子程式執行
完成後沒有回收其PCB,那麼出現的是殭屍程式,所以我們寫程式也需要使用WAITPID函式進行資源
回收。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-1993920/,如需轉載,請註明出處,否則將追究法律責任。

相關文章