[英]exec not bash process with another bash
我试图创建新会话而不必注销和登录,因此认为exec会有所帮助。 但是得到了关注
[root@vanhalen ~]# echo $$
46144
[root@vanhalen ~]# exec bash
[root@vanhalen ~]# echo $$
46144
我期望第二次输出具有不同的$$值,因为新的bash流程应取代旧的bash流程。 这是什么行为?
$$
是运行shell的进程的进程ID。 仅当创建新流程时,它才会更改。
在bash
页中,关于exec
:
exec [ -cl ] [ -a名称] [命令[参数]]
如果指定了command,它将替换shell。 没有创建新的过程。 (......)
这意味着exec
行为非常类似于C函数execve
及其各种前端(实际上,外壳程序很可能使用其中之一),因为调用进程的过程映像已替换为描述指定命令的过程映像,而exec
从不回报。 所有这些都是在没有产生新过程的情况下发生的。 旧的外壳就结束了。
不过,在旧进程中运行的新Shell将通过所有通常的启动动作运行(您的.bashrc
是源文件,而所有都是如此)。 这对于一个新的会话是否足够取决于您对术语“会话”的理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.