关于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函数进行资源
回收。