gpt4 book ai didi

perl - jsvc (tomcat) 在使用反引号运行然后失效时无法正确守护进程

转载 作者:行者123 更新时间:2023-11-28 22:23:21 25 4
gpt4 key购买 nike

在 debian lenny 中,当运行/etc/init.d/tomcat5.5 start 时,它运行 jsvc 并期望它自行守护进程。

在一个简单的 bash shell 中,这工作正常。

但是,从脚本来看,这完全卡住了:

例如,下面的代码很有魅力:

#!/usr/bin/perl
my $cmd = '/etc/init.d/tomcat5.5 start';
system($cmd);

但是,由于 jsvc 没有守护进程,以下代码会卡住:

#!/usr/bin/perl
my $cmd = '/etc/init.d/tomcat5.5 start';
`$cmd`;

在 bash 中使用反引号运行时它也会卡住:

#!/bin/bash
CMD='/etc/init.d/tomcat5.5 start'
`$CMD`

这是 jsvc 中的错误吗?知道为什么这在 shell 中或使用 system() 有效,但不使用反引号吗?由于这个问题,我实际上得到了失效/僵尸进程。

最佳答案

只是一种预感——要使作业成为守护进程,它需要关闭在其父进程中打开的所有文件描述符。也许使用 system 比使用反引号/readpipe 更容易做到这一点,尽管我想不出任何好的理由为什么会这样。如果您使用反引号会怎样:

`$CMD < /dev/null > /dev/null 2>&1`

关于perl - jsvc (tomcat) 在使用反引号运行然后失效时无法正确守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4606940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com