exec not bash 进程与另一个 bash
exec not bash process with another bash
我正在尝试创建新会话而无需注销和登录,所以认为 exec 会有所帮助。但是得到了关注
[root@vanhalen ~]# echo $$
46144
[root@vanhalen ~]# exec bash
[root@vanhalen ~]# echo $$
46144
我期待第二个输出的 $$ 值不同,因为新的 bash 进程应该替换旧的。这里的行为是什么?
$$
是shell是运行ning的进程的进程ID。只有在创建新进程时它才会改变。
来自 bash
联机帮助页,关于 exec
:
exec [-cl] [-a name] [command [arguments]]
If command is specified, it replaces the shell. No new process is created. (...)
这意味着 exec
的行为非常类似于 C 函数 execve
及其各种前端(实际上 shell 很可能使用其中之一),因为该过程调用进程的图像被替换为描述指定命令的图像,并且 exec
从不 returns。所有这一切都是在没有产生新进程的情况下发生的;旧的 shell 就结束了。
旧流程中的新 shell、运行ning 将 运行 通过所有通常的启动动作,但是(您的 .bashrc
是来源和所有这些).这是否足以用于新会话取决于您对术语“会话”的理解。
我正在尝试创建新会话而无需注销和登录,所以认为 exec 会有所帮助。但是得到了关注
[root@vanhalen ~]# echo $$
46144
[root@vanhalen ~]# exec bash
[root@vanhalen ~]# echo $$
46144
我期待第二个输出的 $$ 值不同,因为新的 bash 进程应该替换旧的。这里的行为是什么?
$$
是shell是运行ning的进程的进程ID。只有在创建新进程时它才会改变。
来自 bash
联机帮助页,关于 exec
:
exec [-cl] [-a name] [command [arguments]]
If command is specified, it replaces the shell. No new process is created. (...)
这意味着 exec
的行为非常类似于 C 函数 execve
及其各种前端(实际上 shell 很可能使用其中之一),因为该过程调用进程的图像被替换为描述指定命令的图像,并且 exec
从不 returns。所有这一切都是在没有产生新进程的情况下发生的;旧的 shell 就结束了。
旧流程中的新 shell、运行ning 将 运行 通过所有通常的启动动作,但是(您的 .bashrc
是来源和所有这些).这是否足以用于新会话取决于您对术语“会话”的理解。