ubuntu 后台进程?Ubuntu查看进程

大家好,关于ubuntu 后台进程很多朋友都还不太明白,今天小编就来为大家分享关于Ubuntu查看进程的知识,希望对各位有所帮助!

Ubuntu远程启动后台进程与后台启动图形化进程

本文主要介绍,如何在Ubuntu远程连接服务器、远程启动进程、远程启动后台进程、远程启动后台图形化进程的常规方法。

最常用的远程连接方法就是ssh,ssh介绍与使用可以参考 SSH原理与运用(一):远程登录

用下面的命令可以直接连接远程的机器

正常情况下,通过ssh连接上远程机器以后,执行命令,启动进程都没有什么问题。但是如果关闭了ssh窗口,这些启动的进程会自动关闭。

关闭ssh窗口-->关闭session会话-->触发SIGHUP信号-->关闭ssh窗口启动的所有进程

解决方法,可以通过nohup或者screen方式实现ssh关闭而进程不退出

nohup命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup命令运行后台中的程序。要运行后台中的 nohup命令,添加&(表示“and”的符号)到命令的尾部。

例如:后台启动一个node进程

nohup很容易使用,简答的命令启动都没有什么问题,但是对于复杂的需要交互的命令就比较麻烦了,例如,关闭了ssh窗口,但是下次再登录进来的时候,还是想恢复上次的进程交互方式,通过nohup就不能实现,可以通过screen实现

例如:同样上面的方式我们启动一个node进程

对于远程启动的程序,有时候我们并不关心程序是否有图形化界面(比如自动化测试),只要程序能够运行就可以了。xvfb工具提供了这个功能。

Xvfb是什么呢,他的名称是 virtual framebuffer X server for X Version 11, Xvfb可以直接处理Window的图形化功能,并且不会把图像输出到屏幕上,也就是说,就算你的电脑没有启动 Xwindow,你仍然可以执行任何图形程式。详细可以参考维基百科Xvfb

安装xvfb

运行xvfb-run常用命令

例如:

我们通过ssh启动一个chromium浏览器

提示不能打开,如下图

下面通过

通过xvfb-run启动浏览器,命令如下

浏览器启动成功,如下图

在Linux终端中使用后台运行模式启动程序的方法

这是一个篇幅不长但是十分有用的教程,可以帮助你在终端启动一个Linux应用程序,并且使终端窗口不会丢失焦点。

我们有很多可以在Linux系统中打开一个终端窗口的方法,这取决于你的选择以及你的桌面环境。

如果是使用Ubuntu的话,你可以利用CTRL+ALT+T组合键打开终端。当然你也可以使用超级键(Windows键)打开Dash,搜索“TERM”,然后点击“Term”图标来打开终端窗口。

对于其他的桌面环境来说,例如XFCE、KDE、LXDE、Cinnamon以及MATE,你可以在菜单中找到终端。有些环境会在停靠栏或者面板上面包含终端图标。

通常情况下,你可以在终端里面直接输入应用程序名来启动一个应用程序。比如说,你可以通过输入“firefox”来启动Firefox。

在终端启动应用程序的好处是,你可以包含一些额外的参数。

例如,你可以通过下列命令来打开一个Firefox浏览窗口,然后利用默认的搜索引擎搜索相关信息:

复制代码代码如下:firefox-search"linux.cn"

你可能会注意到,如果你启动Firefox,程序打开以后,回到了终端窗口控制,这就意味着你可以继续在终端进行工作。

通常情况下,如果你在终端启动了应用程序,控制会切换到新启动的应用程序,只有程序被关闭以后才会重新切换到终端控制。这是因为你在前台启动了这个程序。

如果要在Linux终端打开应用程序并且返回终端控制,那么你需要将应用程序启动为后台进程。

和下面所列的命令一样,我们可以通过增加一个(&)符号,将应用程序在后台启动。

复制代码代码如下:libreoffice&

译者注:如果需要加参数的话,记得把&符号放在最后。

译者注:一般情况下,关闭终端时,在这个终端启动的后台程序也会被终止,要使终端关闭以后,后台程序依然保持执行可以使用下列命令

复制代码代码如下:nohup command [arg...]&

如果应用程序目录没有安装在PATH变量包含的目录里面的话,我们就没有办法直接通过应用程序名来启动程序,必须输入应用程序的整个路径来启动它。

复制代码代码如下:/path/to/yourprogram&

如果你不确定程序输入哪个Linux目录结构的话,可以使用find或者location命令来定位它。

可以输入下列符号来找到一个文件:

复制代码代码如下:find/path/to/start/from-name programname

例如,你可以输入下列命令来找到Firefox:

复制代码代码如下:find/-name firefox

命令运行的结果会嗖的一下输出一大堆,别担心,你也可以通过less或者more来进行分页查看。

复制代码代码如下:find/-name firefox| more

find/-name firefox| less

当find命令查找到没有权限访问的文件夹时,会报出一条拒绝访问错误,

你可以通过sudo命令来提示权限。当然,如果你没有安装sudo的话,就只能切换到一个拥有权限的用户了。

复制代码代码如下:sudo find/-name firefox| more

如果你知道你要查找的文件在你的当前目录结构中,那么你可以使用点来代替斜杠:

复制代码代码如下:sudo find.-name firefox| more

你可能需要sudo来提升权限,也可能根本就不需要,如果这个文件在你的主目录里面,那么就不需要使用sudo。

有些应用程序则必须要提升权限才能运行,否则你就会得到一大堆拒绝访问错误,除非你使用一个具有权限的用户或者使用sudo提升权限。

这里有个小窍门。如果你运行了一个程序,但是它需要提升权限来操作,输入下面命令试试:

复制代码代码如下:sudo!!

树莓派ubuntu20.04通过service实现py文件开机自启

为了将一个脚本配置为开机自启,我们主要使用 systemd的.service文件实现此功能。以下是对配置服务器 systemd方法的简要介绍。

systemd是系统启动和服务器守护进程管理器,负责激活系统资源、服务器进程和其他进程。它旨在减少对 shell脚本的依赖,并尽可能并行启动更多进程,同时启动更少进程。

一个.service文件的基本结构包含三个主要部分:控制单元(unit)定义、服务(service)定义及安装部分。控制单元(unit)定义了服务的依赖关系和启动顺序,服务(service)定义了服务的执行方式,而安装部分则说明如何将服务添加到系统启动过程中。

控制单元(unit)定义中的 Wants字段与 Requires字段表示依赖关系,但与启动顺序无关。而 After和 Before字段则关注启动顺序,不涉及依赖关系。

在服务本体(service)中,若 Type不为 oneshot,则 ExecStart配置只能执行一条命令,而多个相同配置会选择最后一条。通过在命令前添加连词号(-),可以实现即使指定文件不存在也不抛出错误。

安装服务(install)部分通过 WantedBy字段指定服务所在的 Target(服务组),确保服务在系统启动时正确加载。

在树莓派中创建自定义服务时,首先进入/usr/lib/systemd/system/目录,新建服务脚本。若该目录不存在,可自行建立。按照上述规则编写脚本后,设置服务自启动。完成设置后,执行命令$ sudo systemctl enable my_t265.service,系统会在/lib/systemd/system/目录中创建配置文件,并建立链接到启动目录,使服务在系统启动时自动运行。

启动.service文件时,运行命令$ systemctl start my_t265.service,查看服务状态使用$ systemctl status my_t265.service或者$ journalctl查看日志。

在单个.service文件中执行多个 ExecStart命令,需将 Type设置为 oneshot。此类型服务仅在启动后即完成,不保留后台进程。

树莓派开机重刷USB口是一个使用.service文件实现的例子。此外,了解 systemd-analyze命令可帮助诊断服务启动问题,该命令能显示服务启动时间和关键链。

配置时,通过编辑 systemd.conf文件,并重启系统,添加环境变量确认服务启动状态。使用 status或 journalctl命令查看详细输出。

关于 Target(启动模式),默认的 multi-user.target表示多用户命令行状态,而 graphical.target为图形用户状态,依赖于 multi-user.target。修改默认启动模式时,考虑两个常用的 Target:多用户命令行和图形用户状态。

推荐资料包括 systemd.service中文手册、systemctl配置文件文档、systemd-analyze命令介绍,以及相关链接如树莓派配置自定义服务实现开机自启的教程。

阅读剩余
THE END