进程是否可以请求正在运行的shell进程运行某些命令并接收命令的标准输出?

时间:2018-04-03 04:38:50

标签: c linux bash shell

就Linux API而言,我们可以使用exec*函数或system函数来开始运行shell,然后运行一些命令。

进程是否可能请求已经运行的shell进程(例如bash进程)来运行命令然后接收命令的标准输出?例如,我想在正在运行的shell进程中运行的命令是生成特定于shell的状态信息的命令,例如, dirsjobs

以上是否可以在C中完成,在bash中使用一些实用程序(请参阅herehere)?

例如,我希望有一个C程序或shell脚本,它可以在现有的shell进程中获得运行dirsjobs的输出。

感谢。

1 个答案:

答案 0 :(得分:2)

如果在shell启动期间评估以下内容:

dump_shell_data() {
  mkdir -p -- "$HOME/.shell-state" || return
  jobs >"$HOME/.shell-state/$$.jobs" 2>&1
  dirs >"$HOME/.shell-state/$$.dirs" 2>&1
}
trap dump_shell_data SIGUSR1

...然后向运行上述代码的shell发送SIGUSR1将指示这些shell将jobsdirs输出跳转到以PID命名的文件。

请注意,有很多警告。 shell的用户可能会运行重新定义此陷阱的第三方脚本;阻塞等待命令退出的shell将不会执行陷阱,直到该命令实际完成为止。