Почему системный вызов в perl не возвращается? - PullRequest
0 голосов
/ 05 сентября 2018

Новое, радикальное развитие в этом. Идите до конца и прочитайте.

Perl 5, версия 18, Subversion 2 (v5.18.2), созданный для x86_64-linux-thread-multi
RH6

У меня есть сценарий perl, который выполняет системный вызов (), который запускает сценарий tcsh, но для одного пользователя он не вернется из этого системного вызова. Код примерно такой ...

#!/usr/bin/env perl
print "about to make the system call...\n";
$rv = system("tcsh aa.csh");
print "system call finished, return val = $rv\n";
exit;

И скрипт aa.csh ...

echo "In shell script"     
mkdir foo
source someotherscript.csh
ln -s xxx yyy
echo "In shell script, about to exit"
exit

Этот скрипт выполняется для всех пользователей, кроме одного. Он видит это ...

about to make the system call...
In shell script
In shell script, about to exit

И это просто зависает. Если я нажму ^ C, это завершится ..

system call finished, return val = 2

Забавно, что он печатает «В сценарии оболочки, вот-вот выйдет», а следующим шагом будет «выход», но он просто этого не делает, по крайней мере, не для этого пользователя. Все команды, которые предшествуют этому, на мой взгляд, не имеют значения, потому что дошло до этого сообщения «о выходе». Похоже, что ^ C прерывает сценарий оболочки (который не завершится) и возвращается к сценарию perl, который переходит к завершению.

Так что мой вопрос связан с изучением того, почему он висит для этого парня. В его окружении должно быть что-то, что вызывает проблему, но я не знаю что. И что означает возвращаемое значение «2»? Может ничего не значить, потому что я прервал с ^ C

Спасибо за любую помощь

НОВАЯ РАЗРАБОТКА

Это не имеет ничего общего с Perl. Если скрипт aa.csh просто ...

exit

И пользователь запускает ...

tcsh aa.csh

виснет.

Что с этим?

Модератор, должен ли этот поток быть удален и я должен сделать репост (потому что это так радикально отличается)?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

проблема в поврежденном файле .history.

0 голосов
/ 05 сентября 2018

Пусть он побежит

which exit

из приглашения tcsh. Если это не говорит что-то вроде

exit: shell built-in command

а что-то вроде

exit:   aliased to sleep 99999

тогда вы нашли свою проблему.

Если exit действительно последняя строка вашего aa.csh сценария, то это избыточно, и вы также пытаетесь использовать версию сценария, которая в конце не вызывает exit.

...