SSH是我们最长用的远程连接linux服务器的工具了,安全可靠也很好用。昨天同学就碰到了个问题,他用SSH链接远程的linux服务器,启动 tomcat,然后关闭了SSH,发现tomcat也被关闭了。他怎么也链接不上TOMCAT服务器,我以前也碰到过类似的问题,我以前是用系统守护进程 cron搞定的。仔细的思考了下,SSH是一个进程(一句废话),那么我们在SSH中启动TOMCAT,这个被启动的TOMCAT进程自然属于他的子进程,我用PS查看了下,证实了我的想法
4 S 0 3105 2071 30 75 0 - 1810 - ? 00:00:31 sshd
4 S 0 3107 3105 0 76 0 - 1395 wait pts/1 00:00:00 bash
0 S 0 3143 3107 13 75 0 - 352 write_ pts/1 00:00:06 print
我没有用tomcat做例子,因为我的机器上没有装,print进程是个死循环。那为什么在关闭SSH后,tomcat会被关闭,我想应该和SSH进程有关,应该是在ssh进程的代码里写上了,在他关闭时候杀死所有属于自己的子进程。(linux本身不是这么做的)
在学习了进程管理后,我想到一个办法解决这个问题,我们在启动SSH后,用SSH启动一个进程,再由这个进程去启动我们需要的服务进程,比如tomcat,然后这个父进程不等待子进程执行完毕,就终止了,那么我想服务进程就会被委托给init进程,这样在我们关闭ssh时候,被启动的服务进程和这个init 进程就没有任何关系,自然就不会被关闭。为了看看能不能够实现,我写了段代码测试了下:
[root@liumengli wait]# cat test_wait.c
#include "stdio.h"
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/wait.h>
int main() {
int child;
int * status;
struct rusage * rus;
char * argu[] = {"/program/wait/print", NULL};
if(!(child = vfork())) {
execve("/program/wait/print", argu, NULL);
}
exit(0);
}
[root@liumengli wait]# cat print.c
#include "stdio.h"
int main() {
int i;
while(1);
exit(1);
}
[root@liumengli wait]# ./test_wait
[root@liumengli wait]# ps -le
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 76 0 - 436 - ? 00:00:02 init
1 S 0 2 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/0
......
4 S 0 3147 3145 0 75 0 - 1395 wait pts/3 00:00:00 bash
0 R 0 3308 1 99 85 0 - 351 - pts/3 00:00:03 print
4 R 0 3309 3147 0 76 0 - 1379 - pts/3 00:00:00 ps
从代码我们看到test_wait进程启动了print进程,然后test_wait退出,print就被委托给了init进程,这样我们如果关闭ssh呢,我在关闭了ssh后,去虚拟机里面查看了下进程,下面是输出结果
0 R 0 3308 1 99 85 0 - 351 - pts/3 00:00:03 print
这样我们可以看出print进程没有被退出,为了方便大家使用,我写好了程序和编译后的a.out文件,以及使用说明,大家可以下载下去使用。
分享到:
相关推荐
标题中的"SSH远程连接linux服务器工具"指的是使用SSH协议来远程访问Linux服务器的软件工具。SSH协议提供了身份验证和加密功能,确保了用户与服务器之间的通信不会被窃听或篡改。这对于管理和维护远程服务器尤其重要...
标题中的“buildroot开发板搭建ssh远程登录服务”是指在基于Buildroot构建的嵌入式Linux系统中,通过OpenSSH服务器实现远程登录控制台的功能。嵌入式环境下的SSH允许开发者在没有物理访问设备的情况下,通过网络进行...
### Ubuntu的SSH远程登录知识点详解 #### 一、前言 在现代的IT环境中,SSH(Secure Shell)作为一项重要的安全协议,被广泛应用于不同主机之间的远程管理与数据传输。Ubuntu作为一种流行的Linux发行版,其SSH远程...
当 SSH 服务无法正常启动时,可能由多种原因引起。以下是一些常见的报错情况及其解决方案: 1. **文件权限问题**: 报错信息:`/var/empty/sshd must be owned by root and not group or world-writable.` 这个...
标题“如何开启Ubuntu SSH远程登录”涉及到的是在Ubuntu操作系统中启用Secure Shell (SSH)服务,以便进行远程登录和管理。SSH是一种加密网络协议,用于在不安全的网络上安全地执行命令行操作。以下是关于这一主题的...
Centos 通过 SSH 远程桌面登录 Centos 通过 SSH 远程桌面登录是指使用 Secure Shell(SSH)协议连接到 Centos 服务器,并使用远程桌面协议(Remote Desktop Protocol,RDP)访问 Centos 服务器桌面的一种方法。这种...
默认情况下,CentOS 7 不会自动启动 `sshd` 服务,这意味着用户无法通过 SSH 远程连接到系统。 #### 查看 OpenSSH 是否已安装 ```bash [root@localhost ~]# rpm -qa | grep ssh libssh2-1.4.3-10.el7.x86_64 ...
"闪电登录——SSH远程Linux服务器.pdf" 本文主要介绍了两部分内容:一是 Linux 系统中实现自动加载优盘的技巧;二是使用 SSH 远程登录 Linux 服务器的方法。 Linux 中的自动加载优盘 在 Linux 系统中,也可以实现...
【使用VSCode+SSH远程连接主机/服务器】的教程旨在帮助深度学习和其他需要共享高性能计算资源的用户,解决多人共用一台主机时由于只有一个显示设备而产生的协作问题。通过VSCode的远程开发功能,可以实现在本地...
CentOS 6.5 下安装、配置并启动 SSH 远程访问 在本文中,我们将详细讲解 CentOS 6.5 下安装、配置并启动 SSH 远程访问的步骤。我们将从检查 SSH 是否安装开始,到设置 SSH 服务为开机启动,最后使用 Xshell 客户端...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。在Linux系统中,SSH是管理员和用户进行远程管理、文件传输等操作的常用工具。Windows用户通常会借助第三方软件来实现SSH...
### SUSE Linux Enterprise Server 设置防火墙开启SSH远程端口 #### 一、开启SSH远程端口 在SUSE Linux Enterprise Server (SLES) 中,为了确保系统的安全性,默认情况下防火墙会阻止外部对某些端口(如SSH端口22...
这个"shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止"的方案,就是一种典型的自动化运维实践,它结合了多个核心工具和技术,包括shell脚本、expect、ssh以及scp,用于实现远程服务器管理与文件...
在IT行业中,Linux系统是广泛应用于服务器管理的操作系统,而SSH(Secure Shell)则是一种用于在不安全网络中提供安全远程登录和其他服务的协议。当我们需要自动化执行远程服务器上的任务时,`expect`工具就显得尤为...
在 Putty 中,需要添加组、添加用户、修改 `etc\sshd_config` 文件的选项,然后启动服务。 在 SecureCRT 中,需要打开菜单栏的选项—》会话选项,然后选择“远程/X11”,勾选“转发 X11 数据包”。 五、常见问题 ...
在描述中提到了“一个SSH远程客户端”,这通常指的是像PuTTY、Terminal(MacOS)或Gnome Terminal(Linux)这样的应用程序,它们允许用户通过SSH连接到远程服务器。这里的“无密码ssh客户端”可能是指配置了SSH密钥...