linux远程执行命令后中断联系使远程机独立运行
背景
正常逻辑上通过网络远程在另外一台机器执行一个命令后,就跟本机没有关系了,但是事实上并不是这样的,当执行ssh 后,很多时候也会出现远程反馈信息的情况,换句话就是可以通过ssh实现远程执行调用。但是有些时候并不想在执行过程中建立这种联系,也就是客户机向远程服务机下达命令后,就不用管执行结果,断了连续,以至于不用一直等待,毕竟建立网络连接需要消耗资源。
disown
linux 中bg fg kill wait disown suspend基本是一套的命令,其中的disown 命令是为了消除当前tty的用户建立的shell进程与执行命令的联系,但是后台依然能够查看执行的线程,像是换到后台执行。所以disown是不能断掉与远程的命令的联系。
kill
解决想法是通过&使得命令到后台运行,然后通过kill断掉进程。这个时候有个疑问就是,断掉客户机的进程,会不会中断远程机的命令?通过以下实验证明,不会!!所以该方法可以实现断了远程执行的联系。
[root@node1 ~]# ssh node2 "sleep 100 &" &
[root@node1 ~]# ps -ef|grep 'sleep 100'
root 1661 1361 0 10:20 pts/0 00:00:00 ssh node2 sleep 100 &
[root@node1 ~]# jobs -l
[1]+ 1661 Running ssh node2 "sleep 100 &" &
[root@node1 ~]# kill -9 1661
[root@node2 ~]# ps -aux|grep sleep
root 1690 0.0 0.0 108052 352 ? S 10:20 0:00 sleep 100