#!/bin/bash
{
sleep 3
kill -9 -- -$PPID
}&
tail -f /var/log/*.log
ssh连接服务执行如上代码,ssh连接会断开?好奇怪
执行结果Connection to x.x.x.x closed.
执行系统CentOS Linux release 7.8.2003 (Core)
#!/bin/bash
{
sleep 3
kill -9 -- -$PPID
}&
tail -f /var/log/*.log
ssh连接服务执行如上代码,ssh连接会断开?好奇怪
执行结果Connection to x.x.x.x closed.
执行系统CentOS Linux release 7.8.2003 (Core)
当你使用SSH连接到远程服务器并执行脚本时,脚本中的命令会按照顺序执行。在你的示例中,脚本首先将一个后台任务设置为在3秒后杀死其父进程(即SSH连接)。然后,脚本开始显示/var/log目录下的所有日志文件的内容。
由于父进程(SSH连接)在脚本执行时被杀死,因此SSH连接将被终止,导致连接断开。
为了解决这个问题,你可以将杀死父进程的命令移动到脚本的末尾,或者将其更改为在特定条件下执行。这样可以确保SSH连接在执行其他命令时保持打开状态,直到脚本完成执行。
以下是修改后的示例脚本:
#!/bin/bash
# 其他命令和操作...
# 等待一段时间,以便你可以查看日志文件的内容
sleep 30
# 在脚本结束时杀死父进程
kill -9 -- -$PPID这样,SSH连接将保持打开状态,直到脚本执行完毕或达到指定的等待时间。
我将你的脚本稍作修改如下:
结果打印:

其中ps部分打印:1431972和145170对应:
kill掉的进程是
-ash,-ash 表示一个正在运行的交互式 shell, kill -9 -- -$PPID 的操作将会终止该子 shell 及其所有子进程。