学习进程之命令ps(一)

ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序。
ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。
ctrl-\ 发送 SIGQUIT 信号给前台进程组中的所有进程,终止前台进程并生成 core 文件。

Key Function
Ctrl-c Kill foreground process
Ctrl-z Suspend foreground process
Ctrl-d Terminate input, or exit shell
Ctrl-s Suspend output
Ctrl-q Resume output
Ctrl-o Discard output

Ctrl-l Clear screen


//实验程序jmp.c:
#include "apue.h"
 #include <setjmp.h>

#define TOK_ADD 5

jmp_buf jmpbuffer;

void cmd_add(void);
int  get_token(void);

int main(void)
{
    char line[MAXLINE];
    
    if(setjmp(jmpbuffer) == 0) 
    {
	printf("error\n");
    }

    printf("-----------------------\n");

    cmd_add();
    exit(0);
}


void cmd_add(void)
{
    int token;
    token = get_token();
    if(token != 0)
    {   
        printf("step into here!");
        longjmp(jmpbuffer, 1);
    }
}

此实验的结果输出是在屏幕上不断打印出

step into here!-----------------------


这是setjmp函数和longjmp共同作用的的,

setjmp相当于设定跳转标号,而longjmp的作用长跳转到setjmp设置的标号。

一些命令:

Ctrl + C  #终止正在执行的程序

ps -ef|grep jmp   #查看后台执行的程序

xxx      4162  4052  0 13:55 pts/0    00:00:00 grep --color=auto jmp

kill  4162(进程号)

-------------------------------------------------------------------------------------------------------------

Ctrl +Z  #挂起正在执行的程序jmp

jobs查看当前执行进程

fg %n  把后台执行程序放在前台执行

bg %n 将在后台挂起的进程,继续执行

-------------------------------------------------------------------------------------------------------------


ps命令进程查看命令
ps命令:process status
-e 显示所有进程
-f 全格式

-h 不显示标题
-l 长格式
-w 宽输出
a 显示终端上的所有进程,包括其他用户的进程
r 只显示正在运行的进程
x 显示没有控制终端的进程

最常用三个参数是u、a、x。
#ps axu的输出格式
USER:进程拥有者
PID:进程号
%CPU:占用的CPU使用率
%MEM:占用的内存使用率
VSZ;占用的虚拟内存大小
RSS:占用的内存大小
TTY:终端设备号
STAT:改进程状态
START:进程开始时间
TIME:执行的时间
COMMAND:所执行的指令

对于state(ps工具标识进程的5种状态码)

D:不可中断的休眠(通常表示该进程正在进行I/O动作)
R:正在执行中
S:休眠状态
T:暂停执行
Z:僵死 a defunct (”zombie”) process

<:高优先顺序的进程
N:低优先顺序的进程
L:有内存分页分配并锁在内存内(即时系统或定制I/O)

Kill:中断一个处理进程(process)
当中断一个前台进程是通常用ctrl+c;对于后台进程用kill命令
kill命令是通过向进程发送指定的信号来结束的。默认为TERM信号。TERM信号将终止所有不能捕获该信号的进程,对于能捕获该信号的进程需要使用kill –9信号,该信号是不能被捕获的。
kill杀终端,只能可以把终端的shell杀死,而退出终端,但终端不关闭
pkill 命令名 可以直接杀死进程
pkill qmail //直接杀死qmail程序进程

你可能感兴趣的:(学习进程之命令ps(一))