在bash脚本中获取命令的子进程
Posted
技术标签:
【中文标题】在bash脚本中获取命令的子进程【英文标题】:get sub process of commanad inside bash script 【发布时间】:2015-11-26 16:28:25 【问题描述】:我正在尝试编写一个脚本来获取从 bash 脚本启动的进程的名称和 pid。
示例:
#!/bin/bash
pass=(`command1 | grep .... | tail ... `)&
if [ "$?" = "0" ]; then
echo "pid of the sub-shell "$!
echo "pid of the shell "$$
else
echo $?
exit 1
fi
这个脚本的输出是
pid of the sub-process 22725
pid of the shell 22724
我的问题是如何从 shell 脚本中获取 pid 和 command1 的命令,以及传递变量中的命令结果。
-
如果我删除“&”,我会得到命令的结果(密码),但不会得到子 shell 的 pid
如果我设置了“&”,我会得到 pid 而不是密码
【问题讨论】:
不要将 code sn-ps 用于 shell 代码。 code sn-ps 是 JsFiddle.com 的 Joel Spolsky 在喝醉时改编的功能。他从未完成他的工作。请改用代码块。 好的,还是不行。我需要 3 个值:执行的命令、它的 pid 和命令的值(在我的示例中为密码) 【参考方案1】:更多的上下文会有所帮助,例如,为什么你需要子shell来输出command1的名称,而你必须写“command1”才能首先在子shell中执行它?
如果要求只是获取子shell进程ID及其结果,请将它们输出到不同的行:
read pid; read result; < <(echo $$; echo mypass)
但是,问题表明您希望启动子进程(可能会长时间运行),执行其他活动,然后获取其输出。对于这个尝试命名管道(示例here)或临时文件:
temp=$(mktemp)
command1 ... >$temp &
pid=$!
# other activities here
# ...
wait $pid
read result <$temp
【讨论】:
以上是关于在bash脚本中获取命令的子进程的主要内容,如果未能解决你的问题,请参考以下文章