一、shell简介
是Linux系统的用户界面,它提供用户与内核的一种交互方式。它接收用户输入的命令,并把它送入内核去执行,是一个命令解释器。
脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)
shell 既是应用程序,又是一种脚本语言(应用程序 解析 脚本语言)。
二、脚本的调用形式
2.1 终端手动执行
./xxx.sh 先按照#!指定的解析器解析,如果找不到使用默认解析
2.2 开机运行
2.2.1 方法一
修改文件位置:/etc/rc.local(或者/etc/rc.d/rc.local)
1 编辑rc.local文件(命令后面得加&号,表示后台运行)
2 修改rc.local文件
chmod +x /etc/rc.local
之后将写好的脚本(.sh文件)放到目录 /etc/profile.d/ 下,系统启动后就会自动执行该目录下的所有shell脚本。
2.2.2 方法二
使用以下命令写好将的脚本加权限:
chmod +x 某.sh
将.sh文件放到目录 /etc/init.d/ 目录下
sudo cp slam.sh /etc/init.d/
2.2.3方法三
gnome实现开机自启
gnome-session-properties
前台后台启动
当你启动一个进程时(运行一个命令),可以如下两种方式运行该进程:
- 1 前台进程
- 2 后台进程
默认情况下,启动的每一个进程都是运行在前台的。它从键盘获取输入并发送它的输出到屏幕。
当一个进程运行在前台时,我们不能在同一命令行提示符下运行任何其他命令(启动任何其他进程),因为在程序结束它的进程之前命令行提示符不可用。
启动一个后台进程最简羊的方法:添加一个控制操作符“&”到命令的结尾。例如,如下命令将启动一个后台进程:
$ sleep 10 &
现在 sleep 命令被放在后台运行。当 Bash 在后台启动一个作业时,它会打印一行内容显示作业编号([1])和进程号(PID-5720)。
当作业完成时,作业会发送类似如下的信息到终端程序,来显示此作业已完成,其内容类似如下所示:
[1]+ Done sleep 10
将进程放在后台运行的好处:你可以继续运行其他命令,而不需要等待此进程运行完成再运行其他命令。
下面将启动两个将slam放在后台启动的脚本程序
#!/bin/bash
source /opt/ros/noetic/setup.bash
source /home/qqstar/catkin_loam/devel/setup.bash
pkill -f mapping_velodyne.launch
pkill -f run_ford.launch
sleep 1s
roslaunch lio_sam run_ford.launch &
sleep 1s
roslaunch fast_lio mapping_velodyne.launch &
如何查看进程:使用ps -ef
查看当前所有的进程:
列的含义说明:
- UID: 该进程执行的用户id
- PID: 进程id
- PPID: 该进程的父级进程id,如果一个程序的父级进程找不到,该程序的进程被称为僵尸进程
- C: cpu的占用率,形式是百分数(%)
- STIME: 进程的启动时间
- TTY: 终端设备,发起该进程的设备识别符号,如果显示‘ ?’表示该进程并不是由终端发起
- TIME: 进程的执行时间
- CMD: 该进程的名称或对应的路径
进程可以有如下几种状态:
- D(不可中断休眠状态)——进程正在休眠并且不能恢复,直到一个事件发生为止。
- R(运行状态)——进程正在运行。
- S(休眠状态)——进程没有在运行,而在等待一个事件或是信号。
- T(停止状态)——进程被信号停止,比如,信号 SIGINT 或 SIGSTOP。
- Z(僵死状态)——标记为 的进程是僵死的进程,它们之所以残留是因为它们的父进程适当地销毁它们。如果父进程退出,这些进程将被 init 进程销毁。
若要查看指定进程的状态,可以使用如下命令:
ps -C processName -o pid=,cmd,stat
例如:
$ ps -C sleep -o pid=,cmd,stat
要查看具体进程,可以使用如下命令:
命令:ps -ef | grep 进程名称
三、基本语法
3.1 开启新的终端
开启新的终端窗口,然后执行指令
gnome-terminal -- roslaunch lio_sam run_ford.launch
在已有的终端窗口新建标签栏,然后执行命令
gnome-terminal -x roslaunch lio_sam run_ford.launch
例子:
gnome-terminal -x bash -c "roslaunch lego_loam spiod.launch; exrc bash"
解释:
1、gnome-terminal -x:启动一个新的gnome-terminal窗口。
2、bash -c “roslaunch lego_loam spiod.launch; exrc bash”:在新的gnome-terminal窗口中执行的命令。这里使用了bash -c来执行一系列命令。
具体的命令包括:
roslaunch lego_loam spiod.launch:启动名为spiod.launch的ROS启动文件。
exrc bash:执行exrc命令并指定bash作为参数。根据给出的命令,无法确定exrc命令的具体含义。如果这是一个自定义的命令,那么它将在启动spiod.launch后执行。
3.2 向进程发送信号(kill、pkill)
使用 pkill 命令,可以通过指定进程名、用户名、组名、终端、UID、EUID 和 GID 等属性来杀掉相应的进程。pkill 命令默认也是发送 SIGTERM 信号到进程。
SIGTERM 信号:当进程收到 SIGTERM 信号时,有机会按照已经设计好的流程执行
pkill -f test.launch
3.3 函数
#计算所有参数的和
func.sh 文件内容:
function sum(){
local total=0
for n in $@
do
((total+=n))
done
echo $total
return 0
}
main.sh 文件内容:
#!/bin/bash
source func.sh
echo $(sum 10 20 55 15)
Linux常用命令
ps -u
用于显示指定用户(User)相关的进程(Process)信息。它可以用于列出指定用户正在运行的进程以及与这些进程相关的详细信息。
更具体地说,ps -u 命令的 -u 选项后面需要指定一个用户名(User Name),以显示与该用户关联的进程。该命令将列出该用户拥有的进程的详细信息,如进程 ID(PID)、父进程 ID(PPID)、CPU 使用情况、内存使用情况等。
ps -u username
kill -9
一个用于终止进程的命令,而 24656 是一个示例进程的进程ID(PID)。
在 Linux 中,kill 命令用于向指定的进程发送信号,而 -9 是一个特殊的信号编号,表示强制终止进程。
通过执行以下命令:
kill -9 24656
可以向具有进程ID为 24656 的进程发送强制终止信号。这将立即终止该进程,不给予其进行任何清理或资源释放的机会。
请注意,使用 kill -9 命令要谨慎,因为它会直接终止进程,可能导致数据丢失或其他不良后果。通常情况下,首选使用其他信号(如 SIGTERM)来正常终止进程,以便进程有机会进行清理和资源释放。只在必要时,才使用 kill -9 来强制终止进程。