linux远程执行命令后中断联系使远程机独立运行

本文探讨了如何通过SSH远程执行命令时保持独立性,避免建立不必要的连接。使用`disown`无法完全断开远程联系,而通过`(command)&`或Python的daemon模式可以实现后台执行。通过`kill`可以中断本地进程而不影响远程命令的执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

  正常逻辑上通过网络远程在另外一台机器执行一个命令后,就跟本机没有关系了,但是事实上并不是这样的,当执行ssh 后,很多时候也会出现远程反馈信息的情况,换句话就是可以通过ssh实现远程执行调用。但是有些时候并不想在执行过程中建立这种联系,也就是客户机向远程服务机下达命令后,就不用管执行结果,断了连续,以至于不用一直等待,毕竟建立网络连接需要消耗资源。

disown

  linux 中bg fg kill wait disown suspend基本是一套的命令,其中的disown 命令是为了消除当前tty的用户建立的shell进程与执行命令的联系,但是后台依然能够查看执行的线程,像是换到后台执行。所以disown是不能断掉与远程的命令的联系。一个挂起的命令很难执行这个命令,可以尝试使用"(command)&"的方式使得命令在后台执行;不行就使用python的thread加daemon=True参数,使得主线程不等待子线程,可以使用sleep一段时间来折中这个过程。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值