有人在服务器上的 bash(以 root 身份登录)中产生了 while true 循环。它不断生成进程,幸运的是它退出了,但我需要杀死父进程。我开始知道它是直接从命令行生成的,而不是从脚本生成的,所以我查找“-bash”并杀死了 root 拥有的那些进程。效果很好。
当你这样做时ps aux
,命令列中会显示 bash 的不同变体。
/bin/bash
-bash
-bash
-bash
/bin/bash
bash
/bin/bash
/bin/bash
bash
ETC..
有什么区别?
答案1
前导破折号表示登录 shell,来自man bash
:
登录 shell 的参数零的第一个字符是
-
,或者以选项开头--login
。当 bash 作为交互式登录 shell 或带有该选项的非交互式 shell 被调用时
--login
,它首先从文件中读取并执行命令/etc/profile
(如果该文件存在)。读取该文件后,它会按顺序查找~/.bash_profile
、~/.bash_login
、 和~/.profile
,并从第一个存在且可读的文件中读取并执行命令。--noprofile
当 shell 启动时可以使用该选项来禁止此行为。当登录 shell 退出时,bash 会从文件中读取并执行命令
~/.bash_logout
(如果存在)。
bash
和/bin/bash
是相同的,它们只是调用方式不同(前者不是使用完整路径调用)。