![在shell中更新进程名称,可以吗?](https://linux22.com/image/34198/%E5%9C%A8shell%E4%B8%AD%E6%9B%B4%E6%96%B0%E8%BF%9B%E7%A8%8B%E5%90%8D%E7%A7%B0%EF%BC%8C%E5%8F%AF%E4%BB%A5%E5%90%97%EF%BC%9F.png)
在 C/C++ 中,通常可以这样做strcpy
(argv[0]
,“新进程名称”)。这是恶意软件中用来隐藏真实进程名称的黑客行为。通过shell可以进行这样的操作吗?
我想做的是:更改$1
, $2
, ... 以便脚本可以使用户轻松获取某些信息。例如,如果脚本正在处理 file This_is_file_nr12456.txt
,它可以通过简单的更改argv[1]
使其立即可供用户使用来“发布”此文件ps ax
。
答案1
对于最近的 Linux,如果未设置“noclobber”(并且风向正确),printf foo > /proc/$$/comm
将更改可执行文件名称(事物)。ps -p
在 zsh 中,printf foo >! /proc/$$/comm
无论破坏状态如何,都可以正常工作。
答案2
zsh
的jobs
内置函数可以更改 shell 的进程名称。jobs -Z newname
答案3
您可以这样使脚本递归:
#! /bin/sh -
do-something-with "$1"
shift
[ "$#" -eq 0 ] || exec "$0" "$@"
然后运行时your-script a b c
,ps
输出会依次显示:
your-script a b c
your-script a b
your-script a