当前位置: 首页 > news >正文

系统监控和命令行环境

shell进程间信号:

Ctrl 引发的信号

  1. SIGINT (Interrupt Signal, Signal 2)

    • 触发方式: 用户按下 Ctrl + C
    • 功能: 通常用于中断并终止当前前台进程。例如,当你正在运行一个长时间运行的命令时,按下 Ctrl + C 会发送 SIGINT 信号,使得该进程终止。
  2. SIGQUIT (Quit Signal, Signal 3)

    • 触发方式: 用户按下 Ctrl + \
    • 功能: 类似于 SIGINT,但是 SIGQUIT 信号通常会让程序生成一个核心转储(core dump),并终止程序。这对于调试来说非常有用。
  3. SIGTSTP (Terminal Stop Signal, Signal 20)

    • 触发方式: 用户按下 Ctrl + Z
    • 功能: 让当前前台进程暂停(挂起),并将其放置到后台执行。之后可以通过 fgbg 命令恢复该进程。

常见的错误信号

  1. SIGSEGV (Segmentation Fault, Signal 11)

    • 触发方式: 进程访问了未分配的内存或试图写入一个只读的内存区域。
    • 功能: 通常会导致程序异常终止,并生成一个核心转储。
  2. SIGTERM (Termination Signal, Signal 15)

    • 触发方式: 由 kill 命令默认触发,例如 kill <PID>kill -TERM <PID>
    • 功能: 请求进程正常退出。进程可以捕获此信号并执行清理操作,但如果不处理这个信号,进程将被终止。
  3. SIGKILL (Kill Signal, Signal 9)

    • 触发方式: 由 kill -KILL <PID>kill -9 <PID> 触发。
    • 功能: 强制终止进程。该信号无法被捕获或忽略,进程会立即终止。
  4. SIGHUP (Hangup Signal, Signal 1)

    • 触发方式: 关闭终端或断开连接时触发,也可以手动通过 kill -SIGHUP <PID> 发送。
    • 功能: 通常用于通知进程,终端已经断开连接。许多守护进程会通过此信号重新加载配置文件。

进程执行停止命令:

1. kill

  • 功能: 发送信号给指定的进程,常用于终止进程。
  • 用法:
    • kill -TERM <PID>: 发送 SIGTERM 信号,用于优雅地终止进程。
    • kill -STOP <PID>: 发送 SIGSTOP 信号,暂停进程。
    • kill -SIGHUP <PID>: 发送 SIGHUP 信号,通常用于挂起进程。
    • kill -9 <PID>: 发送 SIGKILL 信号,强制终止进程。

2. bg

  • 功能: 将暂停的进程继续在后台执行。
  • 用法:
    • bg %1: 将编号为 1 的任务继续在后台执行。

3. fg

  • 功能: 将后台运行的进程调回前台。
  • 用法:
    • fg %1: 将编号为 1 的任务调回前台。

4. jobs

  • 功能: 列出当前 shell 会话中所有暂停或后台运行的任务。
  • 用法: 直接输入 jobs,显示任务编号和状态。

5. pgrep

  • 功能: 查找匹配指定条件的进程 ID。
  • 用法:
    • pgrep sleep: 查找名称为 sleep 的进程的 PID。

6. nohup

  • 功能: 运行一个进程,并使其忽略 SIGHUP 信号,这样当关闭终端时进程不会被终止。
  • 用法:
    • nohup sleep 2000 &: 在后台运行 sleep 2000,忽略挂起信号。

7.pkill 

  • 功能: 根据进程名称、用户、终端等条件,批量查找并终止符合条件的进程。

  • 用法:

    • pkill <process_name>: 根据进程名称终止所有符合条件的进程。
    • pkill -U <user_name>: 终止指定用户运行的所有进程。
    • pkill -f <pattern>: 使用模式匹配终止进程。

终端多路复用

tmux

  • 会话 - 每个会话都是一个独立的工作区,其中包含一个或多个窗口

    • tmux 开始一个新的会话
    • tmux new -s NAME 以指定名称开始一个新的会话
    • tmux ls 列出当前所有会话
    • 在 tmux 中输入 <C-b> d ,将当前会话分离
    • tmux a 重新连接最后一个会话。您也可以通过 -t 来指定具体的会话
    • tmux kill-session -t N 关闭当前会话N
  • 窗口 - 相当于编辑器或是浏览器中的标签页,从视觉上将一个会话分割为多个部分

    • <C-b> c 创建一个新的窗口,使用 <C-d> 关闭
    • <C-b> N 跳转到第 N 个窗口,注意每个窗口都是有编号的
    • <C-b> p 切换到前一个窗口
    • <C-b> n 切换到下一个窗口
    • <C-b> , 重命名当前窗口
    • <C-b> w 列出当前所有窗口
  • 面板 - 像 vim 中的分屏一样,面板使我们可以在一个屏幕里显示多个 shell

    • <C-b> " 水平分割
    • <C-b> % 垂直分割
    • <C-b> <方向> 切换到指定方向的面板,<方向> 指的是键盘上的方向键
    • <C-b> z 切换当前面板的缩放
    • <C-b> [ 开始往回卷动屏幕。您可以按下空格键来开始选择,回车键复制选中的部分
    • <C-b> <空格> 在不同的面板排布间切换
出现的问题:
问题1

linux在进入tmux(screen)模式下之后,发现是无法在终端使用鼠标滚轮进行上下翻页拉动的,无法查看上面的终端输出内容了

解决办法:
进入回滚模式(可以操作鼠标滚轮上下翻页):

    先按Ctrl+a键,然后释放,然后再按[键即可进入翻页模式。

切换回之前模式:

    Ctrl+c

配置文件

常见命令配置:

bash - ~/.bashrc, ~/.bash_profile
git - ~/.gitconfig
vim - ~/.vimrc 和 ~/.vim 目录
ssh - ~/.ssh/config
tmux - ~/.tmux.conf

可移植性:

if [[ "$(uname)" == "Linux" ]]; then {do_something}; fi# 使用和 shell 相关的配置时先检查当前 shell 类型
if [[ "$SHELL" == "zsh" ]]; then {do_something}; fi# 您也可以针对特定的设备进行配置
if [[ "$(hostname)" == "myServer" ]]; then {do_something}; fi

   远程连接:

ssh_agent
SSH密钥添加到ssh-agent
  1. 启动ssh-agent

    eval "$(ssh-agent -s)"
  2. 添加SSH私钥到ssh-agent

    ssh-add ~/.ssh/id_rsa

    要让 SSH 密钥长期有效并在每次启动时自动加载到 ssh-agent 中,您可以按照以下步骤操作:

    配置 ssh-agent 在启动时自动运行

    以确保每次启动 shell 时自动启动 ssh-agent 并加载密钥。

     添加以下代码段到~/.zshrc配置文件中:

    # 启动 ssh-agent
    eval "$(ssh-agent -s)"# 自动加载 SSH 密钥
    ssh-add -K ~/.ssh/id_ed25519
    

    然后:source ~/.zshrc  (输入对应的密码即可

请注意:

  1. -K 选项用于在 macOS 上保存密钥到系统的钥匙串中(适用于 macOS 的特性)。

  2. 如果您使用的是其他类型的密钥(例如 id_rsa),将文件路径替换为相应的密钥路径。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 会赢的!(牛客)
  • python进阶篇-day04-闭包与装饰器
  • Springboot快速创建的两种方法(简单易学)
  • UE5 UMG UI编辑器工作流
  • HarmonyOS NEXT未成年人模式无缝联动所有应用,过滤非适龄内容
  • C语言学习笔记 Day15(文件管理--下)
  • 多态,匿名内部类(lambda表达式),集合
  • 【Tools】如何评价黑悟空这款游戏
  • Python中的集合魔法:解锁高效数据处理的秘密
  • 无法连接Redis服务问题排查
  • 云计算实训36——mysql镜像管理、同步容器和宿主机时间、在容器外执行容器内命令、容器的ip地址不稳定问题、基础镜像的制作、镜像应用
  • Question mutiple pdf‘s using openai, pinecone, langchain
  • 新160个crackme - 045-CyTom-crackme
  • 如何用GPT进行编程辅助?
  • MyBatis 源码解析:DefaultSqlSessionFactory 的创建与管理
  • 30天自制操作系统-2
  • dva中组件的懒加载
  • JavaScript DOM 10 - 滚动
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • webgl (原生)基础入门指南【一】
  • 从伪并行的 Python 多线程说起
  • 关于使用markdown的方法(引自CSDN教程)
  • 缓存与缓冲
  • 前端js -- this指向总结。
  • 前端攻城师
  • 数组的操作
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 以太坊客户端Geth命令参数详解
  • 优秀架构师必须掌握的架构思维
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 阿里云重庆大学大数据训练营落地分享
  • 昨天1024程序员节,我故意写了个死循环~
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​业务双活的数据切换思路设计(下)
  • #Linux(make工具和makefile文件以及makefile语法)
  • #数学建模# 线性规划问题的Matlab求解
  • (1)(1.13) SiK无线电高级配置(六)
  • (12)Linux 常见的三种进程状态
  • (C语言)共用体union的用法举例
  • (层次遍历)104. 二叉树的最大深度
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十三)MipMap
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • ******之网络***——物理***
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .Net - 类的介绍
  • :class的用法及应用
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • @private @protected @public
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [2016.7.Test1] T1 三进制异或