相关疑难解决方法(0)

在创建守护进程时执行双叉的原因是什么?

我正在尝试在python中创建一个守护进程.我发现了以下问题,其中有一些我目前正在关注的好资源,但我很好奇为什么需要双叉.我抓住谷歌,发现有足够的资源声明一个是必要的,但不是为什么.

有人提到它是为了防止守护进程获得控制终端.没有第二个叉子怎么做呢?有什么影响?

python unix daemon

156
推荐指数
5
解决办法
5万
查看次数

Linux CreateProcess?

我在linux平台上开发.

我想在我的库中创建一个新进程而不替换当前正在执行的图像.

因为我正在开发一个库,所以我没有主要功能.

我想在调用程序应用程序关闭后继续新进程(就像CreateProcess Windows API一样).

是否可以在Linux中使用?

像这样的功能:

void Linux_CreateProcess(const char* app_name)
{
  // Executing app_name.

  // ???????? what is the code ??????

  // app_name is running and never close if current application close.
  return;
}
Run Code Online (Sandbox Code Playgroud)

注意:

  • system()阻止当前进程,这并不好.我想继续当前的流程.

  • exec()系列替换当前正在执行的图像,这并不好.

  • 如果当前进程关闭,popen()将关闭新进程.

c++ linux createprocess

9
推荐指数
3
解决办法
3万
查看次数

如何避免<defunct>进程?

我从主控主机到从属主机进行 ZFS 远程复制,其中我有一个在主控主机上运行的 Perl 脚本。

对于每个文件系统,它会 ssh 到远程主机并以侦听模式启动 mbuffer,然后脚本继续发送数据。成功后 mbuffer 应自行退出。

问题

通过 ssh 在远程主机上启动 mbuffer 然后能够继续执行脚本是相当困难的。我最终做了你可以在下面看到的事情。

问题是,在脚本退出之前,它会<defunct>为每个文件系统留下一个进程。

问题

是否可以避免这些<defunct>流程?

sub mbuffer {
    my ($id, $zfsPath) = @_;

    my $m = join(' ', $mbuffer, '-I', $::c{port});
    my $z = join(' ', $zfs, 'receive', , $zfsPath);
    my $c = shellQuote($ssh, $::c{slaves}{$id}, join('|', $m, $z));

    my $pm = Parallel::ForkManager->new(1);
    my $pid = $pm->start;
    if (!$pid) {
        no warnings;  # fixes "exec" not working
        exec($c);
        $pm->finish;
    }

    sleep 3; …
Run Code Online (Sandbox Code Playgroud)

linux ssh perl fork zombie-process

3
推荐指数
1
解决办法
6063
查看次数

标签 统计

linux ×2

c++ ×1

createprocess ×1

daemon ×1

fork ×1

perl ×1

python ×1

ssh ×1

unix ×1

zombie-process ×1