LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: sdew

关于xinitrc有些疑问

[复制链接]
发表于 2008-8-10 00:09:02 | 显示全部楼层
Post by sdew;1884254
这里还有个不理解的,你说shell遇到&会先开一个shell再执行命令,那我之前的那个例子里命令只有(urxvt &) 那按理来说pstree的时候应该看到urxvt前面还应该有个bash


这里urxvt的父进程应该就是sh,而不是再多加一个bash
shell执行命令的基本过程是
对于每一个命令,先fork,然后在子进程里exec该命令

  1. if (pid=fork()) {
  2.     waitpid(pid....);
  3. } else {
  4.     execlp("command"...);
  5. }
复制代码

也就是说本来这个子进程执行命令的方式就是exec
实际上这是unix里执行新命令(也就是开启新进程)的唯一方式:先fork,创建一个和父进程一模一样的进程,然后再在子进程里exec,用新的一个程序文件替换当前进程的内存镜像

如果这个命令是exec command,那么就又fork出来的子进程来exec command

所以没有区别

Post by sdew;1884254

所以我认为当有&存在时那个exec就被无视了,而不是产生一个subshell后再被exec去替换。


我粗略的看了看,没有发现这样的代码
如果你有兴趣继续研究,给你一个提示
具体的处理&的代码在这个文件的928和930行
http://www.google.com/codesearch ... qjD2e8qFHg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-10 16:10:59 | 显示全部楼层
谢谢版大了,这样子总算知道它的详细运作了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表