详解shell脚本(十)——磁盘和进程

检查磁盘及文件系统错误

要检查分区或文件系统的错误,只需要将路径作为fsck的参数:

fsck /dev/sdbs

检查/etc/fstab中所配置的所有文件系统:

fsck -A

指定fsck自动修复错误,无需询问是否进行修复:

fsck -a /dev/sda2

模拟fsck要执行的操作:

fsck -AN

收集进程信息

ps -e -f (e,every;f,full显示多列 )

选项-o可以使用不同的参数

参数 描述
pcpu CPU占用率
pid 进程ID
ppid 父进程ID
pmem 内存使用率
comm 可执行文件名
cmd 简单命令
user 启动进程的用户
nice 优先级
time 累计的CPU时间
etime 进程启动后流逝的时间
tty 所关联的TTY设备
euid 有效用户ID
stat 进程状态

ps -eo comm,pcpu | head

top对于系统管理员来说是一个极为重要的命令。它默认会输出一个占用CPU最多的进程列表。输出结果每隔几秒就会更新。

杀死进程以及发送或响应信号

列出所有可用的信号 kill -l

终止进程:kill PROCESS_ID_LIST

kill命令默认发出一个TERM信号。进程ID列表使用空格作为进程ID之间的定界符。

要通过kill命令向进程发送指定的信号,可以使用:kill -s SIGNAL PID 经常使用的有:

  • SIGHUP 1 对控制进程或终端的终结进行挂起检测。
  • SIGINT 2 当按下Ctrl + C 时发送该信号
  • SIGKILL 9 用于强行杀死进程
  • SIGTERM 15 默认用于终止进程
  • SIGTSTP 20 当按下Ctrl + Z时发送该信号

当我们要强行杀死一个程序时,可以使用

kill -s SIGKILL PROCESS_ID
kill -9 PROCESS_ID
killall process_name #通过命令名终止进程
killall -s SIGNAL process_name #通过名称向进程发送信号
killall -9 process_name #通过名称强行杀死进程

能够响应信号SIGINT 的shell脚本

#!/bin/bash

function handler()
{
  echo Hey, received signal : SIGINT
}

echo My process ID is $$
    #$$是一个特殊的变量,它可以返回当前进程/脚本的进程的ID
trap 'handler' SIGINT
#handler是信号SIGINT的信号处理程序的名称

while true;
do
    sleep 1
done

向用户终端发送消息

向终端中所有的当前登录用户发送广播消息:

cat message | wall 
wall< message

向指定用户的终端发送消息的脚本

#!/bin/bash

USERNAME=$1

devices=`ls /dev/pts/* -l | awk '{ print $3,$10 }' | grep $USERNAME | awk '{ print $2 }'`
for dev in $devices;
do
    cat /dev/stdin > $dev
done

运行脚本:

./message_user.sh USERNAME < message.txt
#通过stdin传递消息,USERNAME作为参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值