liukun2009 发表于 2018-8-23 13:44:02

Shell中fork/source/exec的区别

  fork是linux的系统调用,用来创建子进程,子进程是父进程的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process>默认shell中的命令都是此种方式,创建sub-shell,然后执行。执行完后,返回父shell。
  exec和source都属于bash内置命令,执行source和exec的过程中都不会产生新的进程,被调用的脚本与父脚本在同一个Shell进程内执行。source和exec的区别在于exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行了。所以被调用的脚本中声明的变量和环境变量,都可以在主脚本中得到和使用
  

  总结:
  source命令: 不创建子进程,在当前Shell进程中执行脚本,
  exec命令:不创建子进程, 在当前Shell进程中执行脚本, 父脚本中exec行之后的内容不会执行
  fork属于系统调用, 会创建一个子进程, 父进程会阻塞等待子进程执行结束, 然后继续往下执行

页: [1]
查看完整版本: Shell中fork/source/exec的区别