【发布时间】:2019-09-08 15:41:18
【问题描述】:
我正在使用一些代码行来检查特定软件程序是否在我的计算机上运行,方法是检查我计算机上正在运行的进程。完整代码为:
public static void main(String[] args) {
try {
String line;
Process p = Runtime.getRuntime().exec("ps -x");
BufferedReader input =
new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
if(line.contains("/xyz/")) System.out.println("Found it!");
}
input.close();
}
catch (Exception err) {
err.printStackTrace();
}
System.exit(0);
}
当使用 Netbeans 8.2 运行这些行时,我会得到一长串正在运行的进程(总共大约 90 个进程)。并且找到了我正在寻找的过程。然后,当我使用 Netbeans 11.1 运行相同的代码时,我只得到了几个进程(只有 6 个进程),并且找不到我正在寻找的进程。我的电脑操作系统是 Ubuntu。 Netbeans 8.2 和 11.1 都以默认方式安装,我没有进行任何修改。两次运行均以计算机上的同一用户身份完成。
为什么 Netbeans 8.2 和 11.1 之间的行为存在差异?如何让 Netbeans 11.1 在我的计算机上获取所有正在运行的进程?
编辑 1:根据 cmets 中的建议,我已验证从 Netbeans 和命令行运行程序。 Netbeans 8.2 和 11.1 都指示运行相同的命令行:
java -jar "/home/joe/NetBeansProjects/Sandbox/dist/Sandbox.jar"
此结果与我在 Netbeans 8.2 中运行程序时得到的结果相同。我从 Netbeans 11.1 获得的结果与所有其他结果不同(我得到的输出要少得多)。
编辑 3:这是从我在 Netbeans 11.1 中的程序或从 GNOME 终端运行 ps -x 的结果。这是两天后做的,运行的进程数和我发原始问题的时候略有不同。
ps -x 在 Netbeans 11.1 中的结果:
PID TTY STAT TIME COMMAND
1 tty2 S+ 0:00 /usr/libexec/flatpak-bwrap --args 34 netbeans-desktop
190 tty2 Sl+ 1:41 /app/jdk/bin/java <long command string>
367 tty2 R+ 0:00 ps -x
(找到 3 个进程)
ps -x 在 GNOME 终端中的结果(注意命令被截断)
PID TTY STAT TIME COMMAND
2075 ? Ss 0:00 /lib/systemd/systemd --user
2076 ? S 0:00 (sd-pam)
2092 ? Sl 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
2096 tty2 Ssl+ 0:00 /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SH
2102 ? Ss 0:00 /usr/bin/dbus-daemon --session --address=systemd: --n
2109 tty2 Sl+ 0:00 /usr/lib/gnome-session/gnome-session-binary --session
2209 ? Ss 0:00 /usr/bin/ssh-agent /usr/bin/im-launch env GNOME_SHELL
2211 ? Ssl 0:00 /usr/lib/at-spi2-core/at-spi-bus-launcher
2216 ? S 0:00 /usr/bin/dbus-daemon --config-file=/usr/share/default
2218 ? Sl 0:00 /usr/lib/at-spi2-core/at-spi2-registryd --use-gnome-s
2232 ? Ssl 0:00 /usr/lib/gvfs/gvfsd
2237 ? Sl 0:00 /usr/lib/gvfs/gvfsd-fuse /run/user/1000/gvfs -f -o bi
2255 tty2 Sl+ 0:27 /usr/bin/gnome-shell
2265 ? S<l 0:00 /usr/bin/pulseaudio --start --log-target=syslog
2269 ? S 0:00 /usr/lib/x86_64-linux-gnu/pulse/gconf-helper
2271 ? S 0:00 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2
2281 tty2 Sl 0:00 ibus-daemon --xim --panel disable
2285 tty2 Sl 0:00 /usr/lib/ibus/ibus-dconf
2289 tty2 Sl 0:00 /usr/lib/ibus/ibus-x11 --kill-daemon
2292 ? Sl 0:00 /usr/lib/ibus/ibus-portal
2297 ? Ssl 0:00 /usr/lib/xdg-desktop-portal/xdg-permission-store
2304 ? Sl 0:00 /usr/lib/gnome-shell/gnome-shell-calendar-server
2308 ? Ssl 0:00 /usr/lib/evolution/evolution-source-registry
2316 ? SLl 0:00 /usr/lib/gnome-online-accounts/goa-daemon
2330 ? Sl 0:00 /usr/lib/gnome-online-accounts/goa-identity-service
2335 ? Ssl 0:00 /usr/lib/gvfs/gvfs-udisks2-volume-monitor
2342 ? Ssl 0:00 /usr/lib/gvfs/gvfs-afc-volume-monitor
2347 ? Ssl 0:00 /usr/lib/gvfs/gvfs-mtp-volume-monitor
2351 ? Ssl 0:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
2355 ? Ssl 0:00 /usr/lib/gvfs/gvfs-goa-volume-monitor
2365 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-power
2366 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-print-notification
2369 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-rfkill
2372 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-screensaver-proxy
2374 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-sharing
2382 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-sound
2385 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-xsettings
2389 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-wacom
2390 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-smartcard
2395 tty2 Sl+ 0:02 /usr/bin/gjs /home/joe/.local/share/gnome-shell/ex
2396 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-a11y-settings
2400 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-color
2404 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-clipboard
2408 ? Sl 0:00 /usr/lib/dconf/dconf-service
2409 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-housekeeping
2412 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-datetime
2416 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-media-keys
2421 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-keyboard
2436 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-mouse
2467 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-printer
2472 tty2 Sl+ 0:00 /usr/lib/gnome-disk-utility/gsd-disk-utility-notify
2483 tty2 Sl+ 0:02 nautilus-desktop
2484 tty2 Sl+ 0:00 /usr/lib/x86_64-linux-gnu/indicator-messages/indicato
2489 tty2 Sl+ 0:00 python3 /usr/lib/gnome-tweak-tool/gnome-tweak-tool-li
2528 ? Sl 0:00 /usr/lib/gvfs/gvfsd-trash --spawner :1.22 /org/gtk/gv
2535 ? Ssl 0:08 /home/joe/.dropbox-dist/dropbox-lnx.x86_64-80.4.12
2537 ? Ssl 0:00 /usr/lib/evolution/evolution-calendar-factory
2561 ? Sl 0:00 /usr/lib/evolution/evolution-calendar-factory-subproc
2567 tty2 Sl 0:00 /usr/lib/ibus/ibus-engine-simple
2575 ? Ssl 0:00 /usr/lib/evolution/evolution-addressbook-factory
2592 ? Sl 0:00 /usr/lib/evolution/evolution-addressbook-factory-subp
2851 ? Ssl 0:00 /usr/lib/gvfs/gvfsd-metadata
3054 tty2 Sl+ 0:00 telepathy-indicator
3060 ? Ssl 0:00 /usr/lib/telepathy/mission-control-5
3078 tty2 Sl+ 0:00 zeitgeist-datahub
3089 ? Ssl 0:00 /usr/bin/zeitgeist-daemon
3096 ? Ssl 0:00 /usr/lib/zeitgeist/zeitgeist/zeitgeist-fts
3137 tty2 Sl 0:00 python3 /usr/share/ibus-anthy/engine/main.py --ibus
3216 tty2 SLl+ 0:03 /usr/bin/gnome-software --gapplication-service
3398 tty2 Sl+ 0:08 /usr/lib/thunderbird/thunderbird
3532 tty2 S+ 0:00 /usr/libexec/flatpak-bwrap --args 34 netbeans-desktop
3537 ? Ssl 0:00 /usr/libexec/flatpak-session-helper
3542 ? Ssl 0:00 /usr/lib/xdg-desktop-portal/xdg-document-portal
3552 tty2 S+ 0:00 /usr/libexec/flatpak-bwrap --args 34 /usr/libexec/fla
3553 tty2 Sl+ 0:00 /usr/libexec/flatpak-dbus-proxy --args=36
3555 tty2 S+ 0:00 /usr/libexec/flatpak-bwrap --args 34 netbeans-desktop
3556 tty2 S+ 0:00 /bin/bash /app/netbeans/platform/lib/nbexec --userdir
3745 tty2 Sl+ 1:48 /app/jdk/bin/java -Djdk.home=/app/jdk -classpath /app
4149 tty2 Sl+ 0:16 /usr/lib/firefox/firefox -new-window
4209 tty2 Sl+ 0:17 /usr/lib/firefox/firefox -contentproc -childID 1 -isF
4252 tty2 Sl+ 0:13 /usr/lib/firefox/firefox -contentproc -childID 2 -isF
4350 tty2 Sl+ 0:00 /usr/bin/python3 /usr/bin/chrome-gnome-shell /usr/lib
5226 tty2 Sl+ 0:00 /usr/lib/firefox/firefox -contentproc -childID 4 -isF
5513 tty2 Sl+ 0:00 gedit /home/joe/Desktop/Empty Document
5700 ? Ssl 0:00 /usr/lib/gnome-terminal/gnome-terminal-server
5709 pts/0 Ss 0:00 bash
5731 pts/0 R+ 0:00 ps -x
(找到 88 个进程)
我观察到的差异: (a) Netbeans 11.1 仅显示与 tty2 相关的进程。 (b) Netbeans 11.1 不显示属于 tty2 的所有进程,只显示一个子集。 (c) Netbeans 11.1 会不会只显示与自身相关的进程,而不是在计算机上运行的所有进程?
编辑 2:这是我在每个 Netbeans 版本中运行 Help > About 时得到的信息:
Product Version: NetBeans IDE 8.2 (Build 201705191307)
Updates: NetBeans IDE is updated to version NetBeans 8.2 Patch 2
Java: 1.8.0_131; Java HotSpot(TM) 64-Bit Server VM 25.131-b11
Runtime: Java(TM) SE Runtime Environment 1.8.0_131-b11
System: Linux version 5.0.0-27-generic running on amd64; UTF-8; en_US (nb)
User directory: /home/joe/.netbeans/8.2
Cache directory: /home/joe/.cache/netbeans/8.2
Product Version: Apache NetBeans IDE 11.1
Java: 11.0.4; OpenJDK 64-Bit Server VM 11.0.4+11
Runtime: OpenJDK Runtime Environment 11.0.4+11
System: Linux version 5.0.0-27-generic running on amd64; UTF-8; en_US (nb)
User directory: /home/joe/.netbeans/11.1
Cache directory: /home/joe/.cache/netbeans/11.1
我注意到 Java 版本不同。我不知道这是否会导致 Runtime.getRuntime().exec() 命令中的结果不同。
【问题讨论】:
-
仅粘贴部分代码不足以解决此问题。它确实需要Minimal, Reproducible Example,因此请相应地更新您的问题。整个程序应该只有几行。另外:[1] 对比不同输出的几个屏幕截图可能会有所帮助。 [2] 使用以下信息更新您的问题:(a) 您用于在 NetBeans 8.2 上构建和运行代码的 Java 版本。 (b) 您用于在 NetBeans 11.1 上构建和运行代码的 Java 版本。
-
两个版本的 NetBeans 安装方式是否相同?它们是否都以同一用户身份运行?
-
@skomisa :我已将代码扩展为我用于本次调查的完整代码。
-
@VGR :两个版本的 Netbeans 都以默认方式安装。我没有对他们的设置进行任何修改。我以同一用户身份运行程序。
-
@user207421 这很重要,因为问题可能是由于使用的 Java 版本而不是使用的 NetBeans 版本。我承认这不太可能,但使用较新版本的 NetBeans 似乎也不太可能是原因。也许有一些与安装较新版本的 NetBeans 相关的权限问题?