“sendmail:MTA:接受连接”如何是正确的命令行?

Kar*_*ter 4 command-line proc

cat /proc/21637/cmdlinesendmail: MTA: accepting connections我无法想象这是一个正确的命令行。因为我没有sendmail安装,也没有找到它PATH,甚至它的输出中看起来很方便的东西都没有locate sendmail让我担心(如果你告诉我命令行表明有问题,我会问一个单独的问题)。

我正在使用 Ubuntu 16.10 和 Linux 4.8.0-32-generic。

mur*_*uru 5

应用程序可以(并且确实)在启动后重写其命令行参数。有时这样做是出于安全目的,有时是为了便于演示。IIRCmysql或其他一些 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);
}
Run Code Online (Sandbox Code Playgroud)

测试:

$ make foo
cc     foo.c   -o foo
$ ./foo & pgrep -fa bar
[1] 18047
18047 bar: accepting blah
Run Code Online (Sandbox Code Playgroud)

记下 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
Run Code Online (Sandbox Code Playgroud)