使用sudo运行单个可执行文件会在进程列表中添加两个进程

亚伯拉罕

我编写了一个程序来捕获来自网络接口的数据包。当它侦听网络适配器时,我需要使用来运行它sudo问题是,为什么我在运行它时将两个进程添加到进程列表中?

注意:lwdpi是我的程序

执行前:

ghasemi@ghasemi-MS-7693:~/Desktop/lwdpi_cpp$ ps ax | grep lwdpi
 4665 pts/21   S+     0:00 grep --color=auto lwdpi
ghasemi@ghasemi-MS-7693:~/Desktop/lwdpi_cpp$ 

Execution:
ghasemi@ghasemi-MS-7693:~/Desktop/lwdpi_cpp$ sudo ./lwdpi -i enp5s0
2016:10:26 11:07:29 ::   192.168.1.25   9918  -->     239.1.99.222   9918    UDP
2016:10:26 11:07:29 ::  192.168.1.111   5353  -->      224.0.0.251   5353    UDP
2016:10:26 11:07:30 ::  192.168.1.153   5353  -->      224.0.0.251   5353    UDP
2016:10:26 11:07:30 ::  192.168.1.154   5353  -->      224.0.0.251   5353    UDP
2016:10:26 11:07:30 ::   192.168.1.88   5353  -->      224.0.0.251   5353    UDP
2016:10:26 11:07:30 ::   192.168.1.60   5353  -->      224.0.0.251   5353    UDP
2016:10:26 11:07:37 ::  192.168.1.131  17500  -->  255.255.255.255  17500    UDP
2016:10:26 11:07:37 ::  192.168.1.131  17500  -->    192.168.1.255  17500    UDP
2016:10:26 11:07:37 ::  192.168.1.169   5546  -->     192.168.1.38     53    UDP
2016:10:26 11:07:37 ::  192.168.1.169  30955  -->     192.168.1.38     53    UDP
2016:10:26 11:07:38 ::  192.168.1.110  17500  -->  255.255.255.255  17500    UDP
2016:10:26 11:07:38 ::  192.168.1.110  17500  -->    192.168.1.255  17500    UDP
2016:10:26 11:07:42 ::  192.168.1.169  57189  -->     192.168.1.38     53    UDP
2016:10:26 11:07:42 ::  192.168.1.169  26072  -->     192.168.1.38     53    UDP
2016:10:26 11:07:42 ::  192.168.1.169  41674  -->   199.30.228.113     80    TCP
2016:10:26 11:07:43 ::  192.168.1.169  41676  -->   199.30.228.113     80    TCP
2016:10:26 11:07:43 ::  192.168.1.169   7190  -->     192.168.1.38     53    UDP
2016:10:26 11:07:43 ::  192.168.1.169  30029  -->     192.168.1.38     53    UDP
2016:10:26 11:07:43 ::  192.168.1.169  41678  -->   199.30.228.113     80    TCP
2016:10:26 11:07:43 ::  192.168.1.169  64975  -->     192.168.1.38     53    UDP
2016:10:26 11:07:43 ::  192.168.1.169  12625  -->     192.168.1.38     53    UDP
2016:10:26 11:07:43 ::  192.168.1.169  29973  -->     192.168.1.38     53    UDP
2016:10:26 11:07:43 ::  192.168.1.169  53300  -->     216.58.211.4    443    TCP
2016:10:26 11:07:43 ::  192.168.1.169  41682  -->   199.30.228.113     80    TCP
.
.
.

执行过程中的进程列表:

ghasemi@ghasemi-MS-7693:~/Desktop/lwdpi_cpp$ ps ax | grep lwdpi
 4685 pts/22   S+     0:00 sudo ./lwdpi -i enp5s0
 4686 pts/22   S+     0:00 ./lwdpi -i enp5s0
 4691 pts/21   S+     0:00 grep --color=auto lwdpi
ghasemi@ghasemi-MS-7693:~/Desktop/lwdpi_cpp$ 

如上所示,执行后,将PID = 4685和PID = 4686的进程添加到进程列表中。为什么?我没有在其中调用我的程序!

血红素

当您这样做时:

sudo ./lwdpi -i enp5s0
  • sudo是父进程,它fork(2)是一个子进程,然后将execve(2)./lwdpi作为可执行文件名

  • 的子进程lwdpi也是如此sudo

如您所见,这导致两个过程,一个是sudo,另一个是lwdpi

查看详细信息的最好方法是也检查PPID(父进程ID):

ps -eo pid,ppid,args | grep '[l]wdpi'

您会看到lwdpi的父代sudo本身就是。


这是sudo来自的流程模型man sudo

sudo运行命令时,它将调用fork(2),如上所述设置执行环境,并在子进程中调用execve系统调用。主sudo进程等待命令执行完毕,然后将命令的退出状态传递给安全策略的关闭功能并退出。

如果配置了I / O日志记录插件或安全策略明确请求它,则会创建一个新的伪终端(“ pty”),并使用第二个sudo进程在用户现有的pty和新的pty之间中继作业控制信号。 pty命令在其中运行。此额外的过程使例如挂起和恢复命令成为可能。没有它,该命令将成为POSIX所称的“孤立进程组”,并且它将不会接收任何作业控制信号。

在特殊情况下,如果策略插件未定义关闭函数并且不需要pty,则sudo将直接执行命令,而不是先调用fork(2)。sudoers策略插件仅在启用I / O日志记录,需要pty或启用pam_session或pam_setcred选项时定义关闭函数。请注意,默认情况下在使用PAM的系统上启用pam_session和pam_setcred。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使可执行文件运行不同的进程?

来自分类Dev

正在运行的进程是否会损坏其目录中的可执行文件和文件(当前正在使用)

来自分类Dev

在可执行文件中查找指令,给定其在运行进程中的地址?

来自分类Dev

在可执行文件中查找指令,给定其在运行进程中的地址?

来自分类Dev

Makefile多行破折号命令在分离的进程中运行可执行文件

来自分类Dev

覆盖可执行文件会影响运行原始可执行文件的进程吗?

来自分类Dev

通过同时运行两个可执行文件来衡量内存使用情况

来自分类Dev

使用popen使用两个可执行文件在C中进行读写

来自分类Dev

DUB:使用通用代码库创建两个可执行文件

来自分类Dev

读取可执行文件\进程的指纹

来自分类Dev

读取可执行文件\进程的指纹

来自分类Dev

如何获取Linux中正在运行的进程的完整可执行文件名

来自分类Dev

查找*可执行文件位于当前正在运行的进程的位置

来自分类Dev

将可执行文件加载到当前进程的内存中,然后执行

来自分类Dev

如何使用ptrace()使特定进程执行给定的可执行文件?

来自分类Dev

指定的任务可执行文件cmd.exe无法运行。该进程无法访问该文件,因为该文件正在被另一个进程使用

来自分类Dev

使用Python子进程模块将输入传递给可执行文件

来自分类Dev

使用“ssh 地址可执行文件”时如何正确中断进程?

来自分类Dev

Docker-在单个容器中运行两个进程

来自分类Dev

是否可以使用gcov / gcovr合并来自两个可执行文件的coverage数据?

来自分类Dev

是否可以有两个带有共享库的g ++可执行文件?

来自分类Dev

堆栈构建会创建输出可执行文件的两个副本

来自分类Dev

如何从命令行比较两个可执行文件的版本?

来自分类Dev

如何保留两个独立的Firefox可执行文件

来自分类Dev

DUB:创建两个具有通用代码库的可执行文件

来自分类Dev

是否可以在$ PATH中添加单个可执行文件而不是整个目录?

来自分类Dev

在多台计算机的Windows系统PATH中添加单个python可执行文件?

来自分类Dev

32位进程不支持Microsoft SharePoint。请确认您运行的是64位可执行文件

来自分类Dev

确保当应用程序退出时,由进程从线程运行的可执行文件被终止

Related 相关文章

  1. 1

    如何使可执行文件运行不同的进程?

  2. 2

    正在运行的进程是否会损坏其目录中的可执行文件和文件(当前正在使用)

  3. 3

    在可执行文件中查找指令,给定其在运行进程中的地址?

  4. 4

    在可执行文件中查找指令,给定其在运行进程中的地址?

  5. 5

    Makefile多行破折号命令在分离的进程中运行可执行文件

  6. 6

    覆盖可执行文件会影响运行原始可执行文件的进程吗?

  7. 7

    通过同时运行两个可执行文件来衡量内存使用情况

  8. 8

    使用popen使用两个可执行文件在C中进行读写

  9. 9

    DUB:使用通用代码库创建两个可执行文件

  10. 10

    读取可执行文件\进程的指纹

  11. 11

    读取可执行文件\进程的指纹

  12. 12

    如何获取Linux中正在运行的进程的完整可执行文件名

  13. 13

    查找*可执行文件位于当前正在运行的进程的位置

  14. 14

    将可执行文件加载到当前进程的内存中,然后执行

  15. 15

    如何使用ptrace()使特定进程执行给定的可执行文件?

  16. 16

    指定的任务可执行文件cmd.exe无法运行。该进程无法访问该文件,因为该文件正在被另一个进程使用

  17. 17

    使用Python子进程模块将输入传递给可执行文件

  18. 18

    使用“ssh 地址可执行文件”时如何正确中断进程?

  19. 19

    Docker-在单个容器中运行两个进程

  20. 20

    是否可以使用gcov / gcovr合并来自两个可执行文件的coverage数据?

  21. 21

    是否可以有两个带有共享库的g ++可执行文件?

  22. 22

    堆栈构建会创建输出可执行文件的两个副本

  23. 23

    如何从命令行比较两个可执行文件的版本?

  24. 24

    如何保留两个独立的Firefox可执行文件

  25. 25

    DUB:创建两个具有通用代码库的可执行文件

  26. 26

    是否可以在$ PATH中添加单个可执行文件而不是整个目录?

  27. 27

    在多台计算机的Windows系统PATH中添加单个python可执行文件?

  28. 28

    32位进程不支持Microsoft SharePoint。请确认您运行的是64位可执行文件

  29. 29

    确保当应用程序退出时,由进程从线程运行的可执行文件被终止

热门标签

归档