$PROGRAM_NAME
$0

包含正在执行的程序的名称。

在某些(但并非所有)操作系统上,为 $0 赋值会修改 ps 程序看到的参数区域。在某些平台上,您可能需要使用特殊的 ps 选项或不同的 ps 来查看更改。修改 $0 作为指示当前程序状态的方式比隐藏您正在运行的程序更有用。

请注意,$0 的最大长度存在平台特定的限制。在最极端的情况下,它可能仅限于原始 $0 所占用的空间。

在某些平台上,ps 显示的修改后的名称之后可能存在任意数量的填充,例如空格字符。在某些平台上,这种填充可能会扩展到参数区域的原始长度,无论您做什么(例如,Linux 2.2 就是这种情况)。

注意:对于 BSD 用户,设置 $0 不会完全从 ps(1) 输出中删除“perl”。例如,将 $0 设置为 "foobar" 可能会导致 "perl: foobar (perl)"(是否显示 "perl: " 前缀和 " (perl)" 后缀取决于您的确切 BSD 变体和版本)。这是一个操作系统功能,Perl 无能为力。

在多线程脚本中,Perl 会协调线程,以便任何线程都可以修改其 $0 的副本,并且更改对 ps(1) 可见(假设操作系统配合)。请注意,其他线程对 $0 的视图不会改变,因为它们有自己的副本。

如果程序是通过 -e-E 开关传递给 perl 的,$0 将包含字符串 "-e"

在 Linux 上,从 perl v5.14.0 开始,除了通过 argv[0] 更改 POSIX 名称(perl 从版本 4.000 开始就一直这样做)之外,还会使用 prctl(2) 设置旧的进程名称。现在,读取旧进程名称的系统实用程序(如 ps、top 和 killall)将识别你在为 $0 赋值时设置的名称。你提供的字符串将在 16 个字节处被截断,这是 Linux 强加的限制。

宽字符在 $0 值中无效。然而,出于历史原因,Perl 接受它们并将它们编码为 UTF-8。当发生这种情况时,会触发一个宽字符警告。

助记符:与 shksh 相同。