包含正在执行的程序的名称。
在某些(但并非所有)操作系统上,为 $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。当发生这种情况时,会触发一个宽字符警告。
助记符:与 sh 和 ksh 相同。