关于子进程的问题

huanglei104 2016-12-13 12:14:41
在书上看到,说shell每执行一个命令前,都会先fork一个子进程,然后在子进程中执行命令。为什么 /bin/echo $$ 会显示bash的进程号,而不是子进程的进程号?
...全文
348 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
huanglei104 2016-12-15
  • 打赏
  • 举报
回复
引用 7 楼 nswcfd 的回复:
shell先解析命令行,把输入分解为/bin/echo和$$,然后执行变量替换,把$$替换为自身的id,然后fork子进程,执行/bin/echo,参数是shell自身id。
我搞清楚了, $$ 代表的不是当前进程的PID,而是当前进程所在shell进程的PID。
隐术后生 2016-12-15
  • 打赏
  • 举报
回复
不知楼主解没解决,路过暖贴
ipqtjmqj 2016-12-13
  • 打赏
  • 举报
回复
输出 echo is a shell builtin
ipqtjmqj 2016-12-13
  • 打赏
  • 举报
回复
type echo
nswcfd 2016-12-13
  • 打赏
  • 举报
回复
shell先解析命令行,把输入分解为/bin/echo和$$,然后执行变量替换,把$$替换为自身的id,然后fork子进程,执行/bin/echo,参数是shell自身id。
cocoabird 2016-12-13
  • 打赏
  • 举报
回复
man echo
ipqtjmqj 2016-12-13
  • 打赏
  • 举报
回复
或者自己写个.sh文件,里面加句echo $$, 再./xxx.sh执行
ipqtjmqj 2016-12-13
  • 打赏
  • 举报
回复
你想输出echo的进程号,就得改echo程序的源码了,在源码里面调用echo $$输出进程id
huanglei104 2016-12-13
  • 打赏
  • 举报
回复
引用 2 楼 ipqtjmqj 的回复:
输出 echo is a shell builtin
我用的是/bin/echo $$ 而不是echo $$

18,773

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧