首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SSH命令立即退出,而不是作为python子进程继续运行

SSH命令立即退出,而不是作为Python子进程继续运行的原因是因为SSH是一种远程登录协议,它用于在远程服务器上执行命令或访问远程服务器的文件。当使用SSH连接到远程服务器并执行命令时,SSH会等待命令执行完毕后返回结果,并在命令执行完毕后立即退出。

在Python中,可以使用subprocess模块来执行SSH命令作为子进程。但是,默认情况下,当SSH命令执行完毕后,子进程会立即退出,而不会继续运行。这是因为SSH命令的执行是一个独立的进程,与Python主进程无关。

如果希望SSH命令作为Python子进程继续运行,可以使用subprocess模块的Popen函数,并设置shell=True参数。这样可以创建一个新的shell进程,在该进程中执行SSH命令,并将其作为Python子进程继续运行。

以下是一个示例代码:

代码语言:python
复制
import subprocess

# SSH命令
ssh_command = "ssh user@hostname 'command'"

# 创建子进程并执行SSH命令
process = subprocess.Popen(ssh_command, shell=True)

# 等待子进程执行完毕
process.wait()

# 继续执行其他操作

需要注意的是,使用shell=True参数可能存在安全风险,因为它允许执行任意的shell命令。为了提高安全性,建议使用SSH密钥认证方式,并限制执行的命令范围。

关于SSH命令的更多信息,您可以参考腾讯云的文档:SSH远程登录

请注意,本回答中没有提及亚马逊AWS、Azure、阿里云、华为云、天翼云、GoDaddy、Namecheap、Google等流行的云计算品牌商,如有需要,可以自行搜索相关信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux expect详解

在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。...interact命令用的其实不是很多,一般情况下使用spawn、send和expect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化...它主要的功能是给ssh运行进程加个壳,用来传递交互指令; expect "*password*":这里的expect也是expect的一个内部命令,这个命令的意思是判断上次输出结果里是否包含“password...”的字符串,如果有则立即返回;否则就等待一段时间后返回,这里等待时长就是前面设置的30秒; send "$password\r":当匹配到对应的输出结果时,就发送密码到打开的ssh进程,执行交互动作;...如果没有这一句登录完成后会退出不是留在远程终端上。

3.2K50

Linux Systemd 实战

启动服务 设置开机启动以后,软件并不会立即启动,必须等到下一次开机。如果想现在就运行该软件,那么要执行systemctl start命令。...Loaded行:配置文件的位置,是否设为开机启动 Active行:表示正在运行 Main PID行:主进程ID Status行:由应用本身(这里是 httpd )提供的软件当前状态 CGroup块:应用的所有进程...继续执行。...字段 含义 simple(默认值) ExecStart字段启动的进程为主进程 forking ExecStart字段将以fork()方式启动,此时父进程将会退出进程将成为主进程 oneshot...上面这个例子中,将KillMode设为process,表示只停止主进程,不停止任何sshd 进程,即进程打开的 SSH session 仍然保持连接。

1.6K20

Python subprocess与命令行交互

Python subprocess 模块是一个功能强大的库,用于启动和与流程交互。 它附带了一些高级 api,比如调用、检查输出和运行,这些都集中在的程序运行和等待完成的进程上。...将它作为一个进程启动,然后将客户机连接到它,并运行一些测试序列。 当完成后,希望以一种有序的方式关闭子程序。 这对于同步运行进程的 api 来说是很难实现的,因此必须查看一些底层级别的 api。...使用底层的 Popen API 异步启动进程(意味着 Popen 立即返回,进程在后台运行)。...启动,交互,实时输出,终止 一个相关的用例是以“实时”方式获取进程的标准输出,不是在最后将所有内容放在一起。 在这里,必须非常小心缓冲,因为它很容易导致程序崩溃和死锁。...线程会轮询标准输出属性,只要有新行可用,就会循环并立即打印它们。 如果运行这个示例,您将注意到进程的 stdout 是实时报告的,不是在最后报告一个错误。

7.2K22

100个Linux命令(7)-进程管理

非exec加载程序的方式是:父进程睡眠,然后执行进程,执行完后回到父进程,所以不会立即退出当前环境)所以为了保证进程安全,若要形成新的且独立的进程,都会先fork一份当前进程,然后在fork出来的进程上调用...那是否可以理解为所有命令、脚本其运行环境都是在shell中呢?显然,上面所说的bash内置命令不是shell中运行的。其他的所有方式,都是在shell中完成,只不过方式不尽相同。...这也就解释了"$(echo $$)"中"$$"的结果是当前bash的pid号,不是shell的pid号,因为它不是使用bash命令进入的shell。...一样,当其所在终端退出后将自动挂到init/systemd进程继续存在,只要screen进程仍存在,其所模拟的物理终端就会一直存在,这样就保证了模拟终端中的进程继续执行。...三种方式可以改变因终端中断发送sighup导致进程也被结束的行为:一是使用nohup命令启动进程,它会忽略所有的sighup信号,使得该进程不会随着终端退出结束;二是将待执行命令放入shell中并放入后台运行

1.7K20

node中创建服务进程

在通过git触发gitlab hook脚本后,需要在跳板机中执行相应的ssh命令执行shell文件启动node服务器,这需要使用一个常用的命令setsid,这样当ssh命令执行完毕shell退出后,node...不过本文的重点并不是介绍这种“命令行”的方式实现daemon进程,而且本文会详细讲述daemon进程的创建原理,且看下文。...,进程仍正常运行”。...执行setsid命令则让进程有了新的特性: 进程脱离父进程所在的session控制,两者独立存在互不影响 进程脱离父进程所在的进程进程脱离原先的命令行终端,终端退出不影响进程 下面再回顾方法一与方法二的区别...,发现方法一其实并不是真正的daemon进程,只是通过侦听相关中断信号并设置nop函数(不执行默认的中断行为)保证进程继续运行而已;方法二则是标准的deamon进程创建方式,优先使用!

1.7K60

Linux: 关于 SIGCHLD 的更多细节

僵尸进程 何为僵尸进程? 一个进程使用fork创建进程,如果子进程退出进程并没有调用 wait 或 waitpid 获取进程的状态信息,那么子进程进程描述符仍然保存在系统中。...其实对于SIGCHLD,我们一般的理解是,进程退出发送的信号,但其实不是的,这个信号代表的含义是: 进程状态变更了,例如停止、继续退出等,都会发送这个信号通知父进程。...> 0: 监听该pid的进程; options: WNOHANG: 调用时,指定的 pid 仍未结束运行,则 wait 立即返回 0; WUNTRACED:...当进程被暂停时,则立即返回进程的 pid; WCONTINUED: 当被暂停的进程,又被信号恢复时,则立即返回进程的pid; 下面这些宏,将搭配status一起使用: WIFEXITED...信号值:21 # kill -SIGTTIN 10848 进程又恢复继续运行了 # kill -SIGTTIN 10848 ... 进程被信号暂停了!

2.6K60

半小时搞会 CentOS 入门必备基础知识

则代表是系统进程; STAT:进程状态,R-运行,S-睡眠,T-停止,s-包含进程,+-位于后台; START:进程启动时间; TIME:进程占用 CPU 的运算时间,注意不是系统时间; COMMAND...Tasks 后面的 zombie,意思为僵尸进程,一般是进程无法正常运行,也没有正常退出卡住了,也有可能这个进程正在终止过程中,如果稍微等待一下还有,那么就需要手工检查一下。...9 SIGKILL 强制终止,用来立即结束程序的运行,本信号不能被阻塞、处理和忽略 15 SIGTERM 正常结束的信号,kill 命令默认就是这个信号,有时候进程已经发生问题,正常无法终止,此时会使用...工作管理 当前的登录终端,只能管理当前终端的工作,不能管理其他登录终端的工作; 放入后台的命令必须可以持续运行一段时间,这样我们才能扑捉和操作这个工作; 放入后台执行的命令不能和前台用户有交互或需要前台输入...5.3 SSH 设置超时断开 SSH 在使用时,经常会因为闲置时间过长倍服务器自动断开,然后又要重新连接,比较麻烦,可以设置一下防止经常被服务器踢出。

1.4K10

编写可靠 bash 脚本的一些技巧

正式运行的脚本也可以不加。 -e :遇到一个命令失败(返回码非零)时,立即退出。 bash 跟其它的脚本语言最大的不同点之一,应该就是遇到异常时继续运行下一条命令。这在很多时候会遇到意想不到的问题。...加上 -e ,会让 bash 在遇到一个命令失败时,立即退出。 如果有时确实需要忽略个别命令的返回码,可以用 || true 。...但还是应该坚持所谓的fail-fast 原则,也就是有异常时停止正常运行不是继续尝试运行可能存在缺陷的过程。如果有命令可以明确忽略异常,那可以用上面提到的 || true 等方式明确地忽略之。...pipefail 与-e 结合使用的话,就可以做到管道中的一个命令失败,就退出脚本。 1. 防止重叠运行 在一些场景中,我们通常不希望一个脚本有多个实例在同时运行。...意外退出时杀掉所有进程 我们的脚本通常会启动好多子脚本和进程,当父脚本意外退出时,进程其实并不会退出,而是继续运行着。如果脚本是周期性运行的,有可能发生一些意想不到的问题。

1.2K21

深入Python进程编程基础

pid = create_child(i) # pid==0是进程,应该立即退出循环,否则进程也会继续生成进程 # 子子孙孙,那就生成太多进程了 if pid =...5s再杀死进程 os.kill(pid, signal.SIGKILL) time.sleep(5) # 父进程继续休眠5s观察进程是否还有输出 运行python kill.py,...它的含义是「僵尸进程」。进程结束后,会立即成为僵尸进程,僵尸进程占用的操作系统资源并不会立即释放,它就像一具尸体啥事也不干,但是还是持续占据着操作系统的资源(内存等)。...time.sleep(5) # 父进程继续休眠5s观察进程是否还存在 运行python kill.py输出如下 in father process in child process in...所以本例中退出状态位0,信号编号位9,还记得kill -9这个命令么,就是这个9表示暴力杀死进程

52320

深入Python进程编程基础——图文版

pid = create_child(i) # pid==0是进程,应该立即退出循环,否则进程也会继续生成进程 # 子子孙孙,那就生成太多进程了 if pid =...5s再杀死进程 os.kill(pid, signal.SIGKILL) time.sleep(5) # 父进程继续休眠5s观察进程是否还有输出 运行python kill.py,...它的含义是「僵尸进程」。进程结束后,会立即成为僵尸进程,僵尸进程占用的操作系统资源并不会立即释放,它就像一具尸体啥事也不干,但是还是持续占据着操作系统的资源(内存等)。...time.sleep(5) # 父进程继续休眠5s观察进程是否还存在 运行python kill.py输出如下 in father process in child process in...所以本例中退出状态位0,信号编号位9,还记得kill -9这个命令么,就是这个9表示暴力杀死进程

76410

TTY 到底是个什么玩意?

host1 上面的 ssh 会被停止 host2 上面的 sleep 命令会被停止,ssh 回话将继续保持 用过 ssh 命令的人都应该知道现象是(2),我们可以在 ssh 提供的 shell 里面随便...所以我们可以猜想:是否是 ssh 进程收到了 SIGINT,然后将其转发到了 ssh 远程那边的程序,自己不会处理这个信号呢?...在这里敲下自己要运行命令,然后发送给系统执行,从系统拿到结果,在纸上打印出结果。 所以,在当时,TTY 是一个硬件,作为一个硬件,是怎么连接到计算机的呢?...验证2 从反面证明一下,假如说我们在 ssh 登录之前,强行将 ssh 所在的 TTY 开启 isig,那么按下 Ctrl-C ,将会结束 ssh 进程本身,不是 ssh 内部运行的程序。...然后在 ssh (当前的前台程序是 sleep 9999)按下 Ctrl+C。这时候 ssh 直接退出了,我们回到了 local shell,不是结束 ssh 中的 sleep。

1.4K30

The Missing Semester of Your CS Education

/usr/local/bin/python import sys for arg in reversed(sys.argv[1:]): print(arg) 内核知道去用 python 解释器不是...shell 命令运行这段脚本,是因为脚本的开头第一行的 shebang shell工具 重要的是你要知道有些问题使用合适的工具就会迎刃而解,具体选择哪个工具则不是那么重要。...比如我最近整了个qq机器人挂在协会的服务器上,那如果我需要让qq机器人在ssh连接断开的情况下继续运行,要么使用screen挂起一个终端,要么就用nohup让终端的关闭也不会影响qq机器人这个后台进程。...命令中的 & 后缀可以让命令在直接在后台运行,这使得您可以直接在 shell 中继续做其他操作。...还有一个命令是pp ,它使用 pprint 打印; r(eturn) - 继续执行直到当前函数运行完,返回结果; c(ontinue) - 执行到下一断点或者结束 q(uit) - 退出调试器。

1.9K21

linux 后台运行进程:& , nohup

nohup命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up / ignoring hangup signals) 即 忽略挂起信号一直在后台执行。...exit来退出终端;如果在nohup执行成功后直接点关闭程序按钮关闭终端的话,这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown,起不到关掉终端后调用程序继续后台运行的作用.../关闭终端之后继续运行相应的进程。...fg 命令 将后台中的命令 调至 前台继续运行。...如果后台中有多个命令,可以用 fg %jobnumber(是命令编号,不是进程号)将选中的命令调出 bg 命令 将一个在后台暂停的命令,变成在后台继续执行。

4.2K40

django的autoreload机制实现

如果子进程退出,就一直停在 os.spawnve这一步; 如果子进程退出退出不是3,while就被终结了;如果是3,继续循环,重新创建进程。...从这个逻辑可以猜想autoreload的机制:当前进程(主进程)其实啥也不干,就监视进程运行状况,进程才是真正干事儿的;如果子进程以exit_code=3退出(应该由于检测到了文件修改),就再启动一遍进程...=3退出,主进程也结束,整个django程序就算跪了。这只是猜想,下面接着来验证。 进程。上面其实有一个疑问,既然是重新启动了一次,为什么子进程不会接着生成进程?...原因就在于RUN_MAIN这个环境变量,主进程中把它改成了true,进程走到python_reloader函数的时候: #django\utils\autoreload.py: def python_reloader...while循环,每隔1秒检测一下文件状态,如果是普通文件有变化,进程退出退出码为3,主进程一看:退出码是3,就重启子进程。。。。

76730

Linux 守护进程|应急响应

这里是 ps 命令的 STAT 列,具体字符含义如下 D 不能中断的进程(通常为IO) R 正在运行中的进程 S 已经中断的进程,通常情况下,系统中大部分进程都是这个状态 T 已经停止或者暂停的进程,如果我们正在运行一个命令...,步骤如下: 直接摘抄吧: 执行一个fork(),之后父进程退出进程继续执行。...之所以要做这一步是因为下面两个原因: 假设daemon是从命令行启动的,父进程的终止会被shell发现,shell在发现之后会显示出另一个shell提示符并让进程继续在后台运行。...或者更简单地说,在setsid()调用之后执行第二个fork(),然后再次让父进程退出并让孙子进程继续执行。...可以看到,在当前系统中,该参数为off,所以才会出现终端关闭或者ssh等远程连接断开的时候,后台进程能够继续以这个session运行 此时再说 nohup 应该就很清晰了,nohup其实就是忽略SIGHUP

3.7K30

僵尸进程与孤儿进程

the process ID,退出状态,运行时间),这些信息直到父进程通过 wait()/waitpid() 来取时才释放。...这样设计的目的主要是保证只要父进程想知道子进程结束时的状态信息,就可以得到 僵尸进程: 一个进程使用 fork 创建进程,如果子进程退出进程并没有调用 wait 或 waitpid 获取进程的状态信息...孤儿进程: 一个父进程退出它的一个或多个子进程还在运行,那么这些进程将成为孤儿进程。孤儿进程将被 init 进程(进程号为1)所收养,并由 init 进程对它们完成状态收集工作。...每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init, init 进程会循环地 wait() 它的已经退出进程。...具体操作为:父进程一次 fork() 后产生一个进程随后立即执行 wait(NULL) 来等待进程结束,然后进程 fork() 后产生孙子进程随后立即exit(0)。

20650

Tomcat进程意外退出,元凶居然是他...

这种情况下,如果用户直接关闭ssh终端的窗口(用鼠标或快捷键),则java进程也会退出如果先ctrl-c终止test.sh进程,然后再关闭ssh终端的话,则java进程不会退出。...ssh终端窗口会导致java进程退出?...我们的推测是ssh窗口在关闭时,对当前交互的shell以及正在运行的test.sh等子进程发送某个退出的Signal,找了一台装有systemtap的机器来验证,所用的stap脚本是从涧泉同学那里copy...这也符合oracle对hotspot虚拟机处理Signal的说明,参考这里,SIGTERM,SIGINT,SIGHUP三种信号都会触发shutdownhook 看来并不是jvm的事,继续猜测是否与进程的状态有关...catalina.sh不再使用test.sh的进程组,而是自己的pid作为pgid,catalina.sh进程在执行完退出后,java进程挂到了init下,java与test.sh进程就完全脱离关系了,

3.9K10

【Linux系统编程】僵尸进程与孤儿进程

僵尸进程 上一篇文章进程的状态中最后我们提出了僵尸状态: 为了方便进程退出后父进程或操作系统获取该进程退出结果,Linux进程退出时,进程一般不会立即死亡,而是要维持一个Z状态即——僵尸状态。...所以,只要子进程退出,但父进程还在运行,且父进程没有读取进程退出的返回代码,进程就会进入僵尸状态。...孤儿进程 首先,我们给出孤儿进程的概念: 孤儿进程指的是在其父进程执行完成退出或被终止后仍继续运行的一类进程。 即如果父进程退出进程继续还在运行,那么该进程就被称为孤儿进程。...是不是bash啊,这也是我们前面讲过的内容——命令行启动的所有程序,最后变成进程其对应的父进程都是bash。...那退出后没有人回收它,它就会一直处于僵尸状态,等待回收没有人回收,那么就导致内存泄漏。 那再来总结一下: 在操作系统领域中,孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程

19310

Tomcat 进程意外突崩,元凶居然是它...

这种情况下,如果用户直接关闭ssh终端的窗口(用鼠标或快捷键),则java进程也会退出如果先ctrl-c终止test.sh进程,然后再关闭ssh终端的话,则java进程不会退出。...ssh终端窗口会导致java进程退出?...我们的推测是ssh窗口在关闭时,对当前交互的shell以及正在运行的test.sh等子进程发送某个退出的Signal,找了一台装有systemtap的机器来验证,所用的stap脚本是从涧泉同学那里copy...这也符合oracle对hotspot虚拟机处理Signal的说明,参考这里,SIGTERM,SIGINT,SIGHUP三种信号都会触发shutdownhook 看来并不是jvm的事,继续猜测是否与进程的状态有关...catalina.sh不再使用test.sh的进程组,而是自己的pid作为pgid,catalina.sh进程在执行完退出后,java进程挂到了init下,java与test.sh进程就完全脱离关系了,

90810
领券