我该如何在Perl 6中向进程ID发送信号?

7
Perl 6有处理信号向Proc::Async发送信号的方法。尽管[p5-p6 perlfunc]文档表示kill函数与Perl 5类似,但实际上不是这样,因为你无法向任意进程ID发送信号(已提交文档问题)。我本想用Perl 6编写一个特定的程序(只是为了好玩),但由于没有可靠的kill函数,只能退而求其次使用Perl 5。
除了付费使用“kill”或“tasklist”(以及“taskkill”)之外,这是否是我们不得不放弃的东西。在S29中有一个“kill”,但显然没有在核心文档中找到它。我还没有遇到任何更具哲学性的文件,讨论什么样的决策驱动各种省略。
我理解,针对许多系统的虚拟机在涉及操作系统特定内容时存在挑战,但我不知道这是否是我们无法拥有像“kill”(如果您重新开始可能更好命名为“signal”;)和“exec”等美好事物的原因。
1个回答

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') {};

我考虑过这个,但我也需要在Windows上使用它。NativeCall确实很棒,但我担心会出现长长的#ifdef列表,为每个系统进行调整,这就是令人讨厌的C情况。 - brian d foy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接