Spawn Perl скрипт как процесс с определенным именем - PullRequest
2 голосов
/ 03 апреля 2012

Мне нужен сценарий Perl, чтобы порождать себя с произвольным именем, то есть, чтобы остальная часть ОС увидела его, например, как. "Aaa.exe". У меня было впечатление, что это возможно сделать в Perl, но теперь я не уверен.

Я использую 32-разрядную сборку Strawberry Perl 5.14 для Windows 7 amd64.

Вот что я пробовал и не работает:

#!perl -w
# spawnself.pl

if ($ARGV[0]) {
    my $name = ($ARGV[0]);
    system {"perl"} $name, $0;
} else {
    print "running as $^X, PID is $$\n";
    print "press Enter to quit...\n";
    my $trash = <>;
}

Я написал это на основе примера exec perldoc page (ссылки на системные страницы там): exec {'/bin/csh'} '-sh';, где, IIUC, цель состоит в том, чтобы заставить / bin / csh думать, что это "-sh" хотя я не уверен, что это также должно сделать csh похожим на "-sh" снаружи. Кроме того, это пример UNIX, а я на Windows.

Я хотел бы иметь скрипт, который запускается (из командной строки) как spawnself.pl aaa.exe, сам порождает, печатает running as aaa.exe, PID is 1234, а просмотр диспетчера задач показывает эту программу как "aaa.exe". Однако мой фрагмент, как и весь остальной мир, все еще видит себя как «perl.exe»:

  • в диспетчере задач, процесс 1234 по-прежнему называется "perl.exe", поэтому он печатает
    running as C:\path\to\my\perl.exe, PID is 1234

Что я делаю не так? Кто-нибудь может пролить свет на это?

1 Ответ

1 голос
/ 03 апреля 2012

Я нашел довольно уродливый, хотя и работающий хак:

#!perl -w
#spawnself-ugly.pl

use File::Copy;

if ($ARGV[0]) {
    my $name = ($ARGV[0]);
    copy($^X, $name);
    my @args = ($name, $0);
    system @args;
} else {
    print "running as $^X, PID is $$\n";
    print "press Enter to quit...\n";
    my $trash = <>;
}

Я на самом деле делаю копию perl.exe и запускаю ее, так что, наконец, я просто запускаю «aaa.exe» , так что нет необходимости врать ни о чем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...