在 htop 或其他显示进程状态的命令中,所有 bash 进程都在命令列中
/bin/bash
Run Code Online (Sandbox Code Playgroud)
但是一个进程在命令列中
-bash
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
Gil*_*il' 31
命令名称前的减号是登录程序用于启动登录 shell 的约定。登录程序是您通常输入密码并为您启动会话的程序,例如login
、sudo -i
、su -
、 sshd 等。登录外壳是文本模式会话的初始外壳。
通常,当一个程序调用另一个程序时,它会将程序的名称作为参数 0 传递;命令行参数从 1 开始编号。例如,当您运行时cp foo bar
,这将执行位于/bin/cp
(在典型系统上)的可执行文件,并cp
作为参数 0、foo
作为参数 1 和bar
作为参数 2传递。通常的约定是使用可执行文件的基本名称作为参数 0。当登录程序调用 shell 时,它违反了此约定并在程序名称之前放置了一个额外的连字符。壳适当地了解该替换惯例和一套东西开登录shell,通常读取初始化文件如~/.profile
,~/.login
,~/.bash_profile
等,这取决于外壳。
另请参阅登录外壳和非登录外壳之间的区别?