$ k=v p &
[1] 3028
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在仍在运行时p更改/proc/3028/environ不提及的内容吗?k=v p
我正在解析/proc/pid/cmdline我的 Linux 系统 (Ubuntu 16.04) 上许多进程的值,并发现虽然大多数条目是空编码的,但正如预期的那样,至少有一个使用空格作为我发现意外的分隔符。
从proc(5) 的文档中,我没有看到任何迹象表明这应该发生。有没有我应该期望空格作为分隔符而不是空值的情况?如果是这样,我在哪里可以找到描述该行为的文档?
这是我尝试为铬浏览器进程之一捕获 cmdline 时看到的内容(请注意,空格字符用于分隔值):
user@host:~$ cat /proc/2721/cmdline
/usr/lib/chromium-browser/chromium-browser --type=gpu-process --field-trial-handle=2073283832741738928,4790986738309707242,131072 --gpu-preferences=GAAAAAAAAAAAAQAAAQAAAAAAAAAAAGAA --gpu-vendor-id=0x15ad --gpu-device-id=0x0405 --gpu-driver-vendor=Mesa --gpu-driver-version=17.2.8 --gpu-driver-date --service-request-channel-token=3778166CAD6E96F44A7268DF1AB1DD53
Run Code Online (Sandbox Code Playgroud)
我希望看到这样的事情(空值作为分隔符),这是我不从系统上的其他进程看:
~$ cat /proc/354/cmdline
vmware-vmblock-fuse/run/vmblock-fuse-orw,subtype=vmware-vmblock,default_permissions,allow_other,dev,suid
Run Code Online (Sandbox Code Playgroud) 来自https://unix.stackexchange.com/a/492346/674
Linux 等内核和 BSD 内核通过
/proc和中的文件提供有关进程的四个(相关)信息sysctl():
- 它的程序映像简称,又名用于流程记账的简称;
- 它的参数字符串,由
execve()运行时初始化并可修改;- 它的环境字符串,由
execve()运行时初始化并可修改;和- 其可执行程序映像文件的完整路径名。
中的哪个文件/proc(以及 的哪些参数sysctl())提供了这四条信息中的每一条?谢谢。
来自关于shebang的bash手册
大多数版本的 Unix 都将此作为操作系统命令执行机制的一部分。如果脚本的第一行以两个字符“#!”开头,则该行的其余部分指定程序的解释器。因此,您可以指定 Bash、awk、Perl 或其他一些解释器,并用该语言编写脚本文件的其余部分。
解释器的参数由脚本文件第一行的解释器名称后面的单个可选参数组成,后跟脚本文件的名称,然后 是其余参数。Bash 将在自己不处理它的操作系统上执行此操作。请注意,某些较旧版本的 Unix 将解释器名称和参数限制为最多 32 个字符。
“可选参数”是指选项的参数,还是可能存在或不存在的参数?
为什么是“单个可选参数”?它不允许多个“可选参数”吗?
如果脚本看起来像
#! /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2
...
Run Code Online (Sandbox Code Playgroud)
当我在 bash 中运行脚本时
$ myscript arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)
在 bash 中执行的实际命令是什么?是吗
$ /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2 myscript arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)
谢谢。