首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“杀死”不同于终端和system()?

为什么“杀死”不同于终端和system()?
EN

Stack Overflow用户
提问于 2014-12-11 20:05:27
回答 1查看 422关注 0票数 3

当我运行以下脚本时,它将在远程主机上执行sleep 123,然后终止本地ssh进程,该进程将退出远程主机上的sleep 123。这是预期的行为。

但是,如果我删除system("kill $p")并使用进程ID从终端执行kill命令,那么本地ssh就会被杀死,但是远程sleep 123仍然存在。没料到。

代码语言:javascript
复制
# /usr/gnu/bin/kill 961
Killed by signal 15.

问题

为什么同一个kill命令不同,取决于从Perl的system()和终端执行它,以及当ssh连接被杀死时,远程sleep 123命令如何生存?

代码语言:javascript
复制
#!/usr/bin/perl    
use strict;
use warnings;
use Parallel::ForkManager;

my $pm = Parallel::ForkManager->new(5);
my $pid = $pm->start;
my $p = $pid;
if (!$pid) {
    system("ssh 10.10.47.47 sleep 123");
    $pm->finish;
}

$p = qx(/usr/bin/pgrep -P $p);
print "ssh pid is $p\n";

system("/usr/gnu/bin/kill $p");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-11 21:53:35

即使是本地主机,ssh也要花费数十毫秒才能连接和执行命令。

当被脚本杀死时,ssh在启动后几毫秒内就会死掉,因此它永远没有机会在远程主机上执行该命令。

当被人类杀死时,ssh有多秒的时间连接和执行。

换句话说,sleep不会在第一种情况下死亡--它永远不会开始。

您可以通过让脚本在杀死ssh之前稍等片刻来确认这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27431459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档