如何停止 snap 包的所有进程(比如 Android-Studio)

如何停止 snap 包的所有进程(比如 Android-Studio)

这个问题很奇怪。请注意,这不是一个android-studio问题,而是一个snap问题。 android-studio只有一个罪魁祸首行为不当,应该受到约束snap

android-studio是通过 安装的snap。但有时关闭后,进程仍然挂在后台并消耗大量 CPU(因此消耗大量电池电量)android-studio。然后我需要使用带有开关的进程 ID 手动终止这些进程-9

这真的是我们想要的方式吗snap

我尝试在互联网上寻找任何指针,但完全没有找到如何借助 来实现这一点snap。要么命令似乎根本不存在,要么没有任何帮助或完全错误。此外,snap 文档似乎很好地隐藏了我要找的部分(或者它缺失了?)。

注意,所有常见的事情都没有问题:

但我还是很困惑我该如何控制 snap 包中的应用程序适当地:

嗯,是的snap,所以一切都包装得井井有条,对吧?而且肯定有一些常见的简单方法可以完全阻止这种卡扣式容器中的一切,对吧?

例如,将lxc-stop container容器中的所有东西都拆掉。很简单。但snap我没有找到类似的东西。

这是我尝试过的方法,部分是其他页面建议的:

$ snap status
error: unknown command "status", see 'snap help'.
$ snap stop android-studio
error: access denied (try with sudo)

它是以用户身份启动的,因此同一个用户必须能够再次停止它。 sudo当然在这里是可以做到的,但让我们重试sudo

$ sudo snap stop android-studio
error: snap "android-studio" has no services
$ killall android-studio
android-studio: no process found

但是对于pstop或,htop有过程(java当然,部分是):

$ ps auxwww | grep android
tino       14352  0.0  0.0   2616  1732 ?        S    12:48   0:00 /bin/sh /snap/android-studio/101/android-studio/bin/studio.sh
tino       14428  4.7 10.6 5042148 420488 ?      Sl   12:48   2:19 /snap/android-studio/101/android-studio/jre/bin/java -classpath /snap/android-studio/101/android-studio/lib/bootstrap.jar:/snap/android-studio/101/android-studio/lib/extensions.jar:/snap/android-studio/101/android-studio/lib/util.jar:/snap/android-studio/101/android-studio/lib/jdom.jar:/snap/android-studio/101/android-studio/lib/log4j.jar:/snap/android-studio/101/android-studio/lib/trove4j.jar:/snap/android-studio/101/android-studio/lib/jna.jar:/snap/android-studio/101/android-studio/jre/lib/tools.jar -Xms256m -Xmx1280m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -XX:CICompilerCount=2 -Dsun.io.useCanonPrefixCache=false -Djdk.http.auth.tunneling.disabledSchemes="" -Djdk.attach.allowAttachSelf=true -Dkotlinx.coroutines.debug=off -Djdk.module.illegalAccess.silent=true -Djna.nosys=true -Djna.boot.library.path= -Didea.vendor.name=Google -Dawt.useSystemAAFontSettings=lcd -Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine -Dsun.tools.attach.tmp.only=true -XX:ErrorFile=/home/tino/java_error_in_STUDIO_%p.log -XX:HeapDumpPath=/home/tino/java_error_in_STUDIO.hprof -Didea.paths.selector=AndroidStudio4.1 -Djb.vmOptionsFile=/snap/android-studio/101/android-studio/bin/studio64.vmoptions -Didea.platform.prefix=AndroidStudio -Didea.jre.check=true com.intellij.idea.Main
tino       45016  0.0  0.0  11128  2452 pts/12   S+   13:37   0:00 grep --color=auto android
$ kill 14352
$ kill 14352
-bash: kill: (14352) - No such process
$ kill 14428
$ kill 14428
$ ps auxwww | grep android
tino       14428  4.7 10.6 5042148 420488 ?      Sl   12:48   2:19 /snap/android-studio/101/android-studio/jre/bin/java -classpath /snap/android-studio/101/android-studio/lib/bootstrap.jar:/snap/android-studio/101/android-studio/lib/extensions.jar:/snap/android-studio/101/android-studio/lib/util.jar:/snap/android-studio/101/android-studio/lib/jdom.jar:/snap/android-studio/101/android-studio/lib/log4j.jar:/snap/android-studio/101/android-studio/lib/trove4j.jar:/snap/android-studio/101/android-studio/lib/jna.jar:/snap/android-studio/101/android-studio/jre/lib/tools.jar -Xms256m -Xmx1280m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -XX:CICompilerCount=2 -Dsun.io.useCanonPrefixCache=false -Djdk.http.auth.tunneling.disabledSchemes="" -Djdk.attach.allowAttachSelf=true -Dkotlinx.coroutines.debug=off -Djdk.module.illegalAccess.silent=true -Djna.nosys=true -Djna.boot.library.path= -Didea.vendor.name=Google -Dawt.useSystemAAFontSettings=lcd -Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine -Dsun.tools.attach.tmp.only=true -XX:ErrorFile=/home/tino/java_error_in_STUDIO_%p.log -XX:HeapDumpPath=/home/tino/java_error_in_STUDIO.hprof -Didea.paths.selector=AndroidStudio4.1 -Djb.vmOptionsFile=/snap/android-studio/101/android-studio/bin/studio64.vmoptions -Didea.platform.prefix=AndroidStudio -Didea.jre.check=true com.intellij.idea.Main
tino       45020  0.0  0.0  11128  2544 pts/12   S+   13:37   0:00 grep --color=auto android
$ kill -9 14428
$ kill -9 14428
-bash: kill: (14428) - No such process

显然有些人是顽固分子,需要-9被杀死!

笔记:

  • 我不想使用killall java,因为这会影响其他java应用程序。
  • 当然,我可以创建一些脚本,来研究/proc和整理属于snap并对此进行操作的进程。
  • 但是我正在寻找一个命令,它涉及snap而不是重新发明轮子并使用基于内部的一些独立的外部命令snap
  • 我在 AskUbuntu 上问这个问题,因为我只snap在 Ubuntu 上使用

答案1

snap 是一个应用程序分发和安装的系统。以 snap 形式安装的程序产生的进程与系统上运行的任何其他软件的进程没有区别,因此管理方式相同。

换句话说,与以 snap 形式安装的软件相关的进程没有任何特定之处。每个软件包都会导致启动一个或多个进程。这些进程是特定于软件的。

因此,对于“如何停止 snap 软件包的进程”这个问题,无法给出一般性的答案。如果您省略“snap”一词,此评论同样适用。因此,实际上,只有针对特定软件才有可能给出特定答案。

答案2

如果 snap 因为有正在运行的进程而拒绝刷新某些内容,你可以通过运行以下命令来准确找出它们:

# snap refresh my-awesome-app

如果有正在运行的进程,它将做出类似如下的响应:

error: cannot refresh "my-awesome-app": snap "my-awesome-app" has running apps (my-awesome-app), pids:
       1210273,1210277,1210278

你可以杀死他们:kill 1210273 1210277 1210278

此后,请再试snap refresh一次。

相关内容