我有一个无限期运行的进程,直到按下一个键。我想使用bash向这个进程注入一个键击以使其终止。根据这篇文章,linux - write commands from one terminal to another我试图使用
echo -e "b" > /proc/[pid]/fd/0
(在这种情况下,字母“b”只是任意的)字母“b”将显示在无限期运行的进程的终端中,但它不会触发程序的终止,就像它所做的那样我实际上在窗口中键入“b”。
我也看到了对xdotools的建议,但我无法让它工作,并且我试图远离依赖GUI实现这一点。
我正在运行Ubuntu 10.04,而且我对bash没有太多经验。
答案 0 :(得分:4)
来自here:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
int main(void)
{
int hTTY = open("/dev/tty1", O_WRONLY|O_NONBLOCK);
ioctl(hTTY, TIOCSTI, "b");
close(hTTY);
return 0;
}
在此示例中,终端和按键是硬编码的,但它可以根据您的需要进行调整。
你可以在Perl中做类似的事情:
perl -e '$TIOCSTI = 0x5412; $tty = "/dev/pts/1"; $char = "b"; open($fh, ">", $tty); ioctl($fh, $TIOCSTI, $char)'
我必须使用sudo
运行其中任何一个。
答案 1 :(得分:0)
如何从脚本中删除进程
killall processname