cat /proc/21637/cmdline
sendmail: MTA: accepting connections
我无法想象这是正确的命令行。因为我没有sendmail
安装它,也没有找到它PATH
,而且它的输出中甚至没有一些看似方便的东西让我担心(如果您告诉我命令行指示locate sendmail
问题,我会单独提问)。
我正在使用带有 Linux 4.8.0-32-generic 的 Ubuntu 16.10。
答案1
应用程序可以(并且确实)重写其命令行参数后他们已经开始了。有时这样做是为了安全目的,有时是为了便于展示。如果我没记错的话,mysql
或者其他一些 DB 命令会从参数列表中删除作为参数给出的密码。
我不确定通常使用什么方法,但一种方法是使用新参数重新执行:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *args[], char *env[])
{
char *argv[] = {"bar: accepting", "blah", NULL};
if (argc == 1)
{
int fd = open("/proc/self/exe", O_RDONLY);
fexecve(fd, argv, env);
}
else
sleep(100);
}
测试:
$ make foo
cc foo.c -o foo
$ ./foo & pgrep -fa bar
[1] 18047
18047 bar: accepting blah
记下 PID。
要查看正在使用的实际可执行文件,请检查/proc/<PID>/exe
:
$ ./foo & ls -l /proc/$!/exe
[1] 18025
3
lrwxrwxrwx 1 muru muru 0 Jan 7 00:59 /proc/18025/exe -> /home/muru/foo