如果我用 打开 wicd gui wicd-gtk &
,关闭它(即使使用“退出”按钮)可能会关闭 gui,但总是会留下一个进程wicd-client
在后台运行,似乎什么都不做。我注意到这一点是因为我在 20 天的正常运行时间后检查了正在运行的进程,结果发现wicd-client
列出了大约 15 个进程。仅供参考,我正在运行 debian jessie。
这些进程为什么不会随着 GUI 而消失?我该如何修复这个问题?
我注意到,如果我wicd-gtk
在关闭 GUI 时启动客户端而不将其置于后台(即仅使用命令),终端仍会挂起,直到我按 CTRL-C。按 CTRL-C 后,进程wicd-client
关闭。
答案1
wicd-gtk
wicd-gtk --no-tray
除非它被调用为或wicd-client --no-tray
(未wicd-curses
安装,wicd-client
则调用wicd-gtk
),否则当其窗口关闭时会挂起。
快速的解决办法是类似这样的在您的 PATH 或 shell 配置文件中将其替换wicd-gtk
为wicd-gtk --no-tray
。
对于不想在后台运行客户端的用户,或者使用害怕的wicd-curses
客户,这很烦人,如果没有命令行选项,则无法配置;wicd-client.py
需要修补。修补程序可以检查现有进程,然后调出附加到该进程的 GTK 窗口,而不是启动。
答案2
我仍然对 wicd 有同样的问题。根本问题是,当您启动 wicd 时,它会启动单独的进程来处理它需要处理的不是您的输入的内容。这些进程相互作用但不是一个进程,GUI 是一个进程,监视器是一个进程,守护进程也是它自己的进程。您可以在下面看到,它不是传统意义上启动的一个程序,而是由单独的 Python 解释器启动的三四个 Python 脚本。
如果你打开终端并使用top -c
(show 命令选项)检查它,你会发现正在运行的进程是:
/usr/bin/python -O /usr/share/wicd/daemon/monitor.py
/usr/bin/python -O /usr/share/wicd/daemon/wicd-daemon.py
/usr/bin/python -O /usr/share/wicd/gtk/wicd-client.py
现在我正在运行 ubuntu,它是 debian 的一个变体,但对我有用的过程可能对您也适用,无需或只需稍加调整。
1、获取 pidps aux | grep wicd
第二,运行kill
并获取进程的 pid。
或者
如果你没有打开其他正在运行的 Python 解释器进程,你可以使用以下命令一次性获取所有进程
kill $(pidof python)
答案3
你没有说你运行的是 wicd-gtk 还是 wicd-curses?你提到了“按钮”,所以听起来像是 GTK。
wicd-gtk 是一个单进程(Python 会话)。抱歉,knotech,但您错了。有守护进程和监视器进程,但它们应该始终保持运行,并且极不可能有多个副本,并且它们不会被称为 wicd-client。为了完整起见,守护进程(和监视器)可以通过运行 wicd-client 来启动,但这仅在它们尚未运行且您输入 gksudo 密码后才会发生。如果您终止守护进程,那么您的网络将不再受管理,它们将不会自动(重新)连接,并且您可能会失去连接。
因此 wicd-gtk 会启动窗口和托盘图标中的一个或两个,或者都不启动。只需输入 wicd-gtk(或输入 wicd-client,它将运行您安装的 wicd 客户端类型)即可启动两者。wicd-gtk --tray 将只启动托盘,wicd-gtk --no-tray 将只启动窗口。wicd-gtk --only-notifications 将不启动任何进程,只会生成一个进程,当您的网络连接或断开连接时,该进程会向您发送通知气泡。
按下窗口中的“退出”按钮将关闭窗口。它不会关闭托盘图标,因此如果您仅使用 wicd-gtk(或 wicd-gtk --tray 并随后打开窗口)启动,那么您将只剩下一个托盘图标。这被称为“关闭托盘”行为,非常常见,尽管如果可以配置不这样做,对某些人来说可能会更好。如果您使用 wicd-gtk --no-tray 启动,则按下“退出”按钮时整个窗口将关闭。如果您确实有托盘图标(有吗?),那么您可以从托盘图标上下文菜单关闭整个窗口。或者从您启动它的地方使用 ctrl-C。
如果您没有托盘图标并且不想要,那么请从 wicd-gtk --no-tray 开始。然后,当您按下“退出”按钮时,您的客户端将关闭。如果您想要托盘图标,但希望在按下窗口中的“退出”按钮时整个图标消失,那么目前您运气不佳。