小编Thi*_*Not的帖子

pcntl_wait 未被 SIGTERM 中断

根据pcntl_wait的 PHP 文档,

等待函数暂停当前进程的执行,直到子进程退出,或者直到传递了一个信号,其动作是终止当前进程或调用信号处理函数。

但是,当我运行以下代码并使用kill -s SIGTERM [pid]信号处理程序将 SIGTERM 发送到父进程时,仅子进程退出后才调用(即我必须等待睡眠完成。不pcntl_wait()应该被 SIGTERM 中断吗?

fork_test.php:

<?php
  declare(ticks = 1);

  function sig_handler($signo) {
    switch ($signo) {
      case SIGTERM:
        echo 'SIGTERM' . PHP_EOL;
        break;
      default:
    }
  }

  pcntl_signal(SIGTERM, 'sig_handler');

  $pid = pcntl_fork();

  if ($pid == -1) {
     die('could not fork');
  }
  else if ($pid) {
    echo 'parent' . PHP_EOL;

    pcntl_wait($status);
  }
  else {
    echo 'child' . PHP_EOL;
    sleep(30);
  }
?>
Run Code Online (Sandbox Code Playgroud)

输出(SIGTERM 仅在等待 30 秒后出现):

$ php …
Run Code Online (Sandbox Code Playgroud)

php sigterm pcntl

5
推荐指数
1
解决办法
1363
查看次数

如何确定是否使用调用者在eval内调用子例程?

我还在学习Perl,我的任务是caller确定是否从eval更高级别调用子程序.我应该想出一些代码来测试它并打印Yes如果它来自evalNo如果不是.我找不到任何关于如何caller在网上使用的好例子,并且想知道是否有人对如何进行此操作有任何想法或建议.

perl

5
推荐指数
2
解决办法
327
查看次数

如何从List :: MoreUtils中执行zip/mesh的反转?

我有两个数组:

@foo = (1, 2, 3, 4);
@bar = ('A', 'B', 'C', 'D');
Run Code Online (Sandbox Code Playgroud)

如果我用mesh/ zip从中拉链List::MoreUtils,我得到这个:

@zipped = (1, 'A', 2, 'B', 3, 'C', 4, 'D');
Run Code Online (Sandbox Code Playgroud)

我该如何向后执行此操作,即从@zipped如何获取@foo@bar

perl

5
推荐指数
1
解决办法
105
查看次数

SLURM上的多线程

我有一个使用该Parallel::ForkManager模块分叉的Perl脚本.

据我所知,如果我分叉32个子进程并要求SLURM调度程序在4个节点上运行作业,每个节点有8个处理器,则代码将在每个核心上执行每个子进程.

我实验室的某个人说,如果我在多个节点上运行一个工作,那么其他节点就不会被使用,而且我在浪费时间和金钱.这准确吗?

如果我使用的是一个脚本,我只能使用SLURM限制一个节点?

linux parallel-processing perl fork slurm

5
推荐指数
1
解决办法
691
查看次数

为git合并使用单独的提交消息更好吗?

我来自SVN背景,所以我不确定典型的git工作流程是什么样的.合并SVN时,提供描述合并的提交消息.这是必要的,因为SVN的合并跟踪在历史上一直很差.

我注意到git的默认行为是如果成功则自动提交合并的结果.这意味着日志通常不会显示合并,因此历史记录中的所有内容看起来都是在一个分支中开发的.这是否更适合将合并显示为额外提交?我可以想出几个原因以及为什么不这样做,但我想要其他用户的一些意见.

svn git merge commit

4
推荐指数
2
解决办法
586
查看次数

为什么@array ~~ LIST返回false,即使@array包含与LIST相同的元素?

我有

@a = (1,2,3); print (@a ~~ (1,2,3))
Run Code Online (Sandbox Code Playgroud)

@a = (1,2,3); print (@a == (1,2,3))
Run Code Online (Sandbox Code Playgroud)

第一个是我期望的工作,但它不会打印任何东西.第二个打印1.

为什么?是不是智能匹配运营商~~应该匹配的情况@a ~~ (1,2,3)

perl smartmatch

4
推荐指数
3
解决办法
1234
查看次数

为什么Perl DBI转义从MySQL检索的值?

我在MySQL中有一个包含撇号()和省略号(...)的值:

$ /bin/echo "select alias from url_alias where source = 'node/12024'" | \
  mysql --skip-column-names -D cat36ia_d7prod
Run Code Online (Sandbox Code Playgroud)

输出:

forum/technical-discussion/nagging-questions-i’ve-been-too-embarrassed-ask…
Run Code Online (Sandbox Code Playgroud)

当我检索用Perl值DBIDBD::mysql,该值已经改变:

$ perl -MDBI -MDBD::mysql -e
      '$dbh=DBI->connect( "DBI:mysql:database=my_db",nick );
       $v=$dbh->selectrow_array(qq|select alias from url_alias where source = "'node/12024'"|);
       print "$v\n";'
Run Code Online (Sandbox Code Playgroud)

输出:

forum/technical-discussion/nagging-questions-i?ve-been-too-embarrassed-ask?
Run Code Online (Sandbox Code Playgroud)

为什么Perl这样做?我可以覆盖它吗?

mysql perl escaping dbi dbd

4
推荐指数
1
解决办法
155
查看次数

如何将单词拆分为组成字母?

我正在使用Perl,我有一个只有一个字的数组:

@example = ("helloword")
Run Code Online (Sandbox Code Playgroud)

我想生成另一个数组,其中每个元素都是单词中的一个字母:

@example2 = ("h", "e", "l"...)
Run Code Online (Sandbox Code Playgroud)

我需要这样做,因为我需要计算"h","e"的数量......我怎么能这样做?

perl

4
推荐指数
1
解决办法
1923
查看次数

当我使用格式字符串"%FT%T"和Time :: Piece-> strptime时,为什么会出现"Error Parsing Time"?

我试图转换2015-09-11T04:00:00Time :: Piece对象.我试过了:

my $date = "2015-09-11T04:00:00";
my $t = Time::Piece->strptime($date, '%FT%T');
print $t->strftime('%F %T');
Run Code Online (Sandbox Code Playgroud)

但我明白了Error Parsing Time.我认为这是因为我正在寻找%FT%T并因为间距而导致问题.我该如何解决这个问题?

perl datetime

4
推荐指数
2
解决办法
1621
查看次数

如果数组的任何元素与另一个数组匹配,则打印数组哈希的键

我有一个像这样的数组:

my @arr = (5, 76, 1000, 21, 47);
Run Code Online (Sandbox Code Playgroud)

这个哈希:

my %hash = (
      Meta => [1000],
);
Run Code Online (Sandbox Code Playgroud)

如果散列的任何值与数组的任何元素匹配,我想打印该匹配的键值.为此,我使用以下函数,它的工作原理如下:

my ($match) = grep { "@{$hash{$_}}" ~~ @arr } keys %hash;
Run Code Online (Sandbox Code Playgroud)

当我在数组的散列中有多个元素时会出现问题,例如:

my %hash = (
      Meta => [1000, 2],
);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我还想返回键("Meta"),因为值1000在数组中,但我不明白.

perl

4
推荐指数
2
解决办法
116
查看次数

标签 统计

perl ×8

commit ×1

datetime ×1

dbd ×1

dbi ×1

escaping ×1

fork ×1

git ×1

linux ×1

merge ×1

mysql ×1

parallel-processing ×1

pcntl ×1

php ×1

sigterm ×1

slurm ×1

smartmatch ×1

svn ×1