Linux 进程操作

基础内容

Posted by AIaimuti on March 10, 2020

一般来说,应用程序的生命周期有三个主要的状态:开始、运行和停止。如果我们想成为称职的进程管理者,每个状态都可以而且应该认真地管理。

启动进程

启动进程最简单的方法是在命令行中输入其名称并按下回车键(Enter)。如果您想启动Nginx Web服务器,请输入“nginx”。
如果你只是想检查一下版本,输入“nginx -v”。

alan@workstation:~$ nginx

alan@workstation:~$ nginx -v
nginx version: nginx/1.14.0

echo $PATH 显示当前PATH环境变量

echo $PATH 显示当前PATH环境变量,即程序的可执行路径,该变量的值由一系列以冒号分隔的目录名组成。 如:/usr/local/bin:/bin:/usr/bin。当我们执行程序时,shell自动跟据PATH变量的值去搜索该程序。比如我们现在的工作目录是根目录/ ,有一个程序sunrise在/bin/目录下,我们可以在命令行输入/bin/sunrise 这样来执行它,还可以直接输入sunrise,这时shell会自动去寻找sunrise这个程序所在的完整路径,找到之后才会去执行该程序。shell在搜索时先搜索PATH环境变量中的第一个目录,没找到再接着搜索,如果找到则执行它,不会再继续搜索。

注意:当前工作目录 ./ 一般并未在搜索范围之列,也就是PATH环境变量的值中并不包含./这个当前工作目录。为什么一般不能加入这个当前工作目录呢?主要原因在于安全问题。试想,一个evil 用户在自己的家目录/home/evil/中放了一个名字叫ls的程序,当root用户或其它用户来到这个/home/evil/目录时,想查看这个目录中有些啥子文件,于是执行ls命令,这时如果./目录在PATH环境变量中且搜索时先搜索这个./目录的话,则执行到的程序是/home/evil/ls而不是/bin/ls程序,这样就会造成极大地安全问题。所以我们要避免把./目录加入PATH环境变量之中,不要图一时方便而铸成大错哦!执行当前工作目录中的 program 时还是老老实实的 ./program 这样执行吧!

使用范例:

[tito ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
[tito ~]$ PATH=$PATH:/home/tito/bin #添加/home/tito/bin到PATH环境变量
[tito ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/tito/bin

which 命令 查看文件路径

使用which命令查看可执行文件的完整路径。

alan@workstation:~$ which nginx   
/opt/nginx/bin/nginx

nohup 命令 保持进程运行

当注销或关闭终端时,进程可能无法继续运行。通过使用nohup命令运行,可以避免这种特殊情况。此外,附加一个“&”符号将把进程发后台运行,并允许用户继续使用该终端。例如,假设您想运行myprogram.sh。 nohup myprogram.sh &

每个进程都给出一个唯一的进程标识号(PID)。这个数字就是我们用来管理每个进程的。我们也可以使用进程的名称,下面我将演示:有几个命令可以检查正在运行的进程的状态。让我们来看看这些。

ps命令 查看进程

ps命令

-a,查看所有

-u,以用户(user)的格式显示

-x, 显示后台进程运行参数

-ef,以全格式显示进程所有信息,包括父进程Pid,创建人,创建时间,进程号。等等

上述方法是ps 命令最常用的方法, 然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。

ps -a| grep program
ps -u| grep program
ps -x| grep program
ps -ef |grep program

kill命令杀死进程

一般项目中,我们首先要查询一个进程,并对其进行删除会用一下命令

ps -a grep helloworld 或
ps -ef grep helloworld 或者其他

查询到helloworld相关的进程,我们通过kill命令来操作该进程号删除该进程,kill -9 PID

hostname 查看用户名

hostnamectl set-hostname name 修改主机名