在shell中更新进程名称,可以吗?

在shell中更新进程名称,可以吗?

在 C/C++ 中,通常可以这样做strcpyargv[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

zshjobs内置函数可以更改 shell 的进程名称。jobs -Z newname

答案3

您可以这样使脚本递归:

#! /bin/sh -
do-something-with "$1"
shift
[ "$#" -eq 0 ] || exec "$0" "$@"

然后运行时your-script a b cps输出会依次显示:

your-script a b c
your-script a b
your-script a

相关内容