使用Bash将键击注入到不同的进程

时间:2012-06-25 23:00:43

标签: bash process inject keystroke

我有一个无限期运行的进程,直到按下一个键。我想使用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没有太多经验。

2 个答案:

答案 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