gpt4 book ai didi

c - 我如何向 Perl 中的 popen'ed 进程发送信号?

转载 作者:行者123 更新时间:2023-12-04 09:47:22 25 4
gpt4 key购买 nike

我写了一个简单的 Perl 脚本,它将在 while 循环中运行,并在任何信号发送到此 Perl 脚本时退出。我写了一个 c 程序,它使用 pthread_create() 创建一个线程,在它的启动例程中,它使用 popen 来执行那个 Perl 脚本:

popen("/usr/bin/perl myprog.pl");

我在 Perl 脚本中使用 sigtrap 来捕获它接收到的任何信号。现在我想从我的 C 程序发送信号 (TERM) 到线程执行的这个 Perl 进程。我怎样才能做到这一点?有什么方法可以向 popen 的进程发送信号。如果需要更多详细信息,请告诉我。

最佳答案

发送信号通常使用kill。为了能够杀死您通常需要您要发送信号的进程的进程 ID、PID。

popen 不会给你那个。但是,有几种选择:

您可以使用 0 的 PID,这会将您的信号发送到进程组中的每个进程。如果您只有一个父进程使用 popen 生成一个子进程,那么使用 kill(0, your_signal) 将是一种方法。

另一种方法是让子进程将其 PID 传回给父进程,例如,在启动后的第一件事就是在一行中输出它。

在 perl 中,这看起来像

print $$, "\n";

执行 popen 的进程然后可以从它获得的文件句柄中读取该行,并使用 strtolatoi 从中提取有用的 pid >,并保留它以便稍后在读取其子进程的实际输出后与 kill 一起使用。

如果出于某种原因,这些方法都不能解决您的问题,您可能希望完全停止使用 popen,并手动执行大部分操作,最重要的是 fork ,因为这将为您提供 PID 以用于稍后发送信号。

关于c - 我如何向 Perl 中的 popen'ed 进程发送信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3853220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com