linux - 在后台启动进程,获取 PID,并在 Shell 中写入标准输入

标签 linux shell

我需要为我的系统安全类(class)做一个缓冲区溢出。因此我确实有一个程序(称为金丝雀)我需要启动它要求输入字符串(read())。 我需要计算一个金丝雀(使用 PID 和时间构建的随机金丝雀)以成功缓冲区溢出。我已经编写了一个程序 (getcanary) 来获取正确的金丝雀。问题: 我尝试在一个额外的终端中启动 canary,然后获取它的 PID,然后计算程序,然后写入 canary 的 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 上运行,所以我不能使用屏幕或 tmux

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

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

最佳答案

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

#!/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"

关于linux - 在后台启动进程,获取 PID,并在 Shell 中写入标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47004891/

相关文章:

php - Linux - 使用 PHP Mail 从 SMTP 服务器发送

sql - 通过 Shell 脚本从 Oracle DB 中提取 Insert 语句

java - 如何从命令行使用 gradle 运行测试套件

php - Zabbix 服务器正在运行 否

android - 你如何知道 Linux 中是否已经存在互斥对象?

bash - 在shell中过滤出文件中匹配的记录

arrays - 如何通过当前 shell (zsh/bash) 检测数组开始索引?

linux - 如果文件名不正确,则将其移至错误文件夹

linux - 磁盘已满,但找不到哪个文件夹占用空间

linux - 如何用sed注释掉第一次出现