如何将信号发送到Perl 6中的进程ID?
问题描述:
Perl 6有方法accept signals和send a signal to a Proc::Async。尽管[p5-p6 perlfunc]文档说杀死与Perl 5非常相似,但并不是因为您不能将信号发送到任意进程ID(doc issue filed)。我有一个特定的程序,我想在Perl 6中编写(为了咯咯笑),但由于缺乏可靠的kill
而*回到Perl 5。如何将信号发送到Perl 6中的进程ID?
短缺脱壳kill
或tasklist
(和taskkill
),这是我们将不得不做的事情。在S29中有一个杀手,但显然不在核心文档中。我还没有碰到任何讨论哪些决定会导致各种遗漏的哲学倾向的文件。
据我所知,靶向许多系统虚拟机具有挑战,当涉及到操作系统,具体的东西,但我不知道如果是这样的原因,我们不能有很好的东西,如kill
(可能是更好的命名signal
如果你重新开始;)和exec
。
答
我知道您正在寻找语言支持,但任何发现此问题的人确实需要解决方案,都可以使用NativeCall。举例来说,使用Linux上的原生kill
(更名为syskill
为理智):
use NativeCall;
# syskill(PID, SIGNAL) -> 0 if sent, -1 if error, see "man 2 kill"
sub syskill(uint32, int32) returns int32 is native is symbol('kill') {};
我想过,但我需要它的Windows了。 NativeCall虽然很酷,但是我担心很多人会讨厌'#ifdef'这个长长的列表来为每一个系统填充它。 –