在后台启动进程,获取PID,并在Shell中写入stdin

时间:2017-10-29 20:26:52

标签: linux shell

我需要为我的系统安全课程做一个缓冲区溢出。因此我有一个程序(称为canary)我需要启动它要求输入字符串(read())。 我需要计算一个金丝雀(用PID和时间构建的随机金丝雀)来成功缓冲区溢出。我已经写了一个程序(getcanary),它让我得到了正确的金丝雀。问题: 我尝试在额外的终端中启动金丝雀,然后获取它的PID,然后计算程序,然后写入金丝雀的STDIN。最后一件事是我遇到问题。

#!/bin/bash
echo "start canary"
x-terminal-emulator -e ./canary &
sleep 1
PID=$(pgrep canary)
CANARY=$(./getcanary $PID)

如何将命令写入额外的终端?我已经尝试了几种解决方案,

echo "cmd" > /proc/$PID/fd/0

就是其中之一 我也试过

mkfifo fifo
cat > fifo &
./canary < fifo
echo "cmd" > fifo

我的环境不允许使用其他一些解决方案,因为脚本必须在xubuntu的干净安装上运行,因此我无法使用screen或tmux

我希望你能帮助我, 谢谢! :)

PS:我很抱歉,如果我误解了我尝试的任何这些解决方案,我对shell脚本不太熟悉。

1 个答案:

答案 0 :(得分:0)

写入终端,而不是正在运行的进程!

#!/bin/bash
echo "start canary"
x-terminal-emulator -e ./canary &
termpid=$!
sleep 1
xvkbd -window $(xdotool search --sync --pid $termpid) -text "echo Hello world!\n"