Perl системный вызов не работает при определенных условиях - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть длинный perl скрипт (25000 строк), где мне нужно использовать системный вызов один раз. Если есть два набора данных, он отлично работает на одном, а на другом - совсем нет. Единственная разница в том, что тот, который не работает, гораздо больше, он занимает больше памяти (половина доступной оперативной памяти) и требует больше времени для ее запуска. Но код идентичен, и ни один системный вызов не работает, когда я запускаю большой набор данных. Я попробовал 10 различных системных вызовов, не связанных с набором данных или сценарием, даже если они запускаются сценарием для большого набора данных, и все они работают с небольшим набором данных.

Я действительно не могу понять это и я застрял на некоторое время, у кого-нибудь есть идея, в чем может быть проблема?

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Проблема была решена кем-то из Perl Монахов: https://perlmonks.org/?node_id=11116169

В Centos нужно было скопировать ха sh в памяти, чтобы создать новый процесс для системный вызов. Решение состоит в том, чтобы заранее раскрутить работника и общаться по каналу.

use MCE::Child;
use MCE::Channel;
1 голос
/ 28 апреля 2020

Предлагаю вам проверить код возврата системы вызова:

if ($? == -1) {
    print "failed to execute: $!\n";
}
elsif ($? & 127) {
    printf "child died with signal %d, %s coredump\n",
        ($? & 127),  ($? & 128) ? 'with' : 'without';
} 
else {
    printf "child exited with value %d\n", $? >> 8;
}
...