(Это cperl 5, версия 24, subversion 4 (v5.24.4c), созданная для x86_64-linux) Ubuntu 18.04.
Ниже приведена работающая программа. Однако когда я запускаю эту программу из Mojolicious::Lite (версия 6.04), она зависает. Используя top, я вижу, что tr съедает весь ЦП. Я попытался использовать cat вместо tr, и он все еще зависает. Если я управляю-C кодом Mojo, он печатает пароль, а затем выходит. Это похоже на то, что tr принимает случайные байты, но не переходит к сгибу, пока я не прерву его. Но это работает в обычном скрипте, а не в моджо...
У кого-нибудь есть идеи, почему?
Тепло
Джон
Скрипт который работает:
#! /usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $pass_length = 3;
my $exec = qq{tr -cd "[:alnum:]" < /dev/urandom | fold -w$pass_length | head -n1};
print Dumper $exec;
my $pass = qx{$exec};
chomp $pass;
print Dumper $pass;
Код Mojolicious Lite, который висит:
use Mojolicious::Lite;
use strict;
use warnings;
use Data::Dumper;
post 'testit' => sub {
my $c = shift;
my $pass_length = 3;
# tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1
my $exec = qq{tr -cd '[:alnum:]' < /dev/urandom | fold -w$pass_length | head -n1};
warn Dumper $exec;
my $pass = qx{$exec};
chomp $pass;
warn Dumper $pass;
return $c->render( json => { foo => 'bar'} );
};
app->secrets('foobar');
app->start;
head -1 /dev/urandom
работает (выдает одну строку), но неhead -1 /dev/urandom | tr-cd '[:alnum:]'
(зависает). Интересно, чтоhead -1 /dev/urandom | echo
дает SIGPIPE:write error: Broken pipe
, ноhead -1 /dev/urandom | cat
работает нормально - person Håkon Hægland   schedule 30.07.2020echo
вышел до того, какhead
написал в канал, что вполне разумно. - person ikegami   schedule 30.07.2020