繁体   English   中英

exec不使用其他bash进行bash处理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM