Как отправить сигнал Perl в Windows? - PullRequest
3 голосов
/ 11 сентября 2010

У меня есть некоторый perl-код, который устанавливает обработчик сигнала:

$SIG{'KILL'} = sub {
....
};

Мне поручено перенести это в windows, и мне было интересно, как я могу сгенерировать этот сигнал из класса C #.

Я видел Process.Kill метод в классе System.Diagnostics.Process, который, кажется, позволяет мне создавать (с помощью другого метода) и убивать мой процесс, но я не могу понять, как заставить его отправлять сигнал в perl сценарий.

Ответы [ 2 ]

6 голосов
/ 11 сентября 2010

Вы, вероятно, думаете о обработчике сигнала TERM, поскольку KILL не может быть пойман. В любом случае, Windows не использует сигналы и, хотя позволяет вам их использовать, она находится только в одном потоке, не отправляя сигналы другим процессам.

Тем не менее, у вас есть множество других механизмов IPC, обычно для изящного запроса на завершение другого процесса это PostMessage(WM_QUIT), но это действительно применимо только к графическим приложениям, которые обычно не используются в Perl-скриптах.

Хорошо поддерживаемый подход в Windows заключается в том, что родительский процесс создает событие (с наследуемым флагом) и передает дескриптор дочернему процессу, а его размещение в среде было бы очень удобно для Perl. Затем ребенок может выполнить действие в ответ на событие.

В дополнение к сообщениям окна и событиям ядра вы можете использовать любые из сокетов, каналов, файлов, почтовых ящиков, кодов выхода процессов, общей памяти, записей реестра и DDE для связи между процессами в Windows.

0 голосов
/ 11 сентября 2010

Как ОС, Windows не поддерживает сигналы. Perl на Windows имеет эмуляцию сигналов для

  • Ctrl-C

  • Вы можете отправить сигнал другому потоку той же Perl-программы.

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