【问题标题】:Duplicate processes launched via shell script通过 shell 脚本启动的重复进程
【发布时间】:2012-07-11 00:42:03
【问题描述】:

我正在使用以下 shell 脚本来启动 java 守护进程(该命令是通过 root 用户启动的):

 #!/bin/sh
 sudo -u postfix CONFIG_LOCATION=/mnt/custom java -Dcom.sun.management.jmxremote.port=10020 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.util.logging.config.file=${PresentWorkingDirectory}/logging.properties -cp "${ExecutableJar}:${PresentWorkingDirectory}${ClassPath}" com.x.y.filter <&- 1>/dev/null 2>&1 &

这导致两个正在运行的进程启动,我在“ps -f -All”输出中看到以下记录:

4 S root     24250     1  0  82   0 - 26247 -      20:33 pts/1    00:00:00 sudo -u postfix CONFIG_LOCATION=/mnt/custom java -Dcom.sun.management.jmxremote.port=10020 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.util.logging.config.file=${PresentWorkingDirectory}/logging.properties -cp "${ExecutableJar}:${PresentWorkingDirectory}${ClassPath}" com.x.y.filter <&- 1>/dev/null 2>&1 &
4 S postfix  24252 24250 47  82   0 - 364460 184466 20:33 pts/1   00:00:31 java -Dcom.sun.management.jmxremote.port=10020 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.util.logging.config.file=${PresentWorkingDirectory}/logging.properties -cp "${ExecutableJar}:${PresentWorkingDirectory}${ClassPath}" com.x.y.filter <&- 1>/dev/null 2>&1 &

我无法理解为什么要启动两个进程?

虽然我打算只运行一个进程,而我的 shell 脚本也只启动一个进程。

有人能解释一下上述观察吗?

需要做什么来纠正这个问题?

【问题讨论】:

    标签: java bash shell


    【解决方案1】:

    这是预期的行为。您正在调用sudo,这是一个过程。此进程会将其用户更改为postfix,然后调用java - 另一个进程。

    如果sudo 使用了exec(因此只有一个进程用于该命令),那么java 将能够运行它不应该运行的东西(因为java 二进制文件将替换@ 987654328@ 内存中的一个,因此拥有sudo 的所有特权),这可能是个坏主意。

    请注意,sudo 二进制文件不会做任何事情:它只会等待java 终止,然后再进行自己的清理。

    要理解的关键之一是sudo 不是一个神奇的系统实用程序,它只是一个普通的应用程序,作为setuid 位。这意味着,sudo 二进制文件可以更改其运行时用户 uid。一旦你看到这个,你就会开始理解 sudo 是如何工作的,以及为什么你会得到两个进程。

    【讨论】:

      猜你喜欢
      • 2017-04-07
      • 2020-09-04
      • 2012-04-12
      • 1970-01-01
      • 2018-02-19
      • 2019-03-04
      • 2012-10-21
      • 2013-11-11
      • 1970-01-01
      相关资源
      最近更新 更多