2017-04-11 66 views
7

Perl 6有方法accept signalssend a signal to a Proc::Async。尽管[p5-p6 perlfunc]文档说杀死与Perl 5非常相似,但并不是因为您不能将信号发送到任意进程ID(doc issue filed)。我有一个特定的程序,我想在Perl 6中编写(为了咯咯笑),但由于缺乏可靠的kill而被迫回到Perl 5。如何将信号发送到Perl 6中的进程ID?

短缺脱壳killtasklist(和taskkill),这是我们将不得不做的事情。在S29中有一个杀手,但显然不在核心文档中。我还没有碰到任何讨论哪些决定会导致各种遗漏的哲学倾向的文件。

据我所知,靶向许多系统虚拟机具有挑战,当涉及到操作系统,具体的东西,但我不知道如果是这样的原因,我们不能有很好的东西,如kill(可能是更好的命名signal如果你重新开始;)和exec

回答

5

我知道您正在寻找语言支持,但任何发现此问题的人确实需要解决方案,都可以使用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') {}; 
+0

我想过,但我需要它的Windows了。 NativeCall虽然很酷,但是我担心很多人会讨厌'#ifdef'这个长长的列表来为每一个系统填充它。 –