进程命令及gdb以及多文件编译的make file文件

本文详细介绍了Linux操作系统中的进程、程序、进程控制块(PCB)以及进程状态。讲解了如何通过ps命令查看进程,包括使用参数如-e、-f等。还涉及用户与命令交互、进程控制(如kill、bg、fg等)以及进程管理工具如top。此外,文章还概述了GCC编译过程的四个步骤,并提到了调试工具gdb的使用方法。最后,简要提到了标准输入输出和库文件的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作系统管理

进程:一个正在执行的程序

程序:由一条条的指令构成

pcb 进程控制块struct task_struct

int pid 唯一标识一个进程

进程状态:就绪 运行 阻塞

ps 查看进程都有啥
PID TTY TIME CMD
4833 ------------- bash
4843 --------------- ps
which ps 可以查看ps在哪里存着,结果是 /usr/bin/ps

ps -f查看的比ps多个功能是谁执行的(如下是stu执行的)

UID — PID ---- PPID----C—STIME-----TTY ------ TIME----CMD
stu------4833—父进程PID

ps -e 查看所有的进程

ps -ef既有所有进程,还包括谁进行的,父进程的PID(所有的终端进程都可以看到)

在这里插入图片描述
用户是和命令解释器进行交互的

kill +PID 结束命令

ps -ef | grep "sleep"找到sleep的pid

sleep 10睡眠10s

ctrl +z暂停命令(如sleep)

jobs 可以查看在后台运行的命令(如暂停的sleep命令)

jobs -l 比jobs查看的内容多一个命令的pid

kill -9 pid 强制杀死,当sleep命令用crtl+z暂停时,kill +pid无法杀死,只有加上 -9强制杀死

pkill sleep 结束所有终端的sleep命令,不用像kill一个一个的结束命令sleep

pkill -9 sleep 强制结束命令

sleep 100&在后台执行该命令,后台可以同时执行多个命令,这样可以继续在前台执行命令

ctrl+c可以结束在前台运行的程序(上面的办法也可以实现前台结束程序kill pkill,它俩得重新创建一个终端),不能结束后台的。

bg %任务号 让在前台停止的命令在后台执行,jobs可以查看任务号,也就是这个命令可以将前台的命令转到后台

fg %任务号 将后台的命令拉到前台执行

kill + pid结束后台的任务

top 相当于Windows的任务管理器,q退出

gcc的四步

在Windows上可执行程序格式为:PE
Linux可执行程序格式:ELF

gcc -E main.c -o main.i 预编译(预编译时不检查语法错误)

1.删除所有的#define,并展开所有的宏定义。

2.处理所有的条件预编译指令#if 0,#end if …

3.处理#include预编译指令,将被包含的文件插入到该预编译指令的位置,
删除所有的注释,

4.添加行号和文件名标识,以便于编译器产生调试用的符号信息及编译时产生编译错误和警告时显示行号。

5.保留所有的的#pragma编译器指令,因为编译器需要使用它们

gcc -S main.i -o main.s 编译,检查语法错误,形成汇编代码(但不取值(实参))
词法分析,语法分析,语义分析,代码优化,汇总符号

gcc -c main.s -o main.o 汇编,将汇编语言转为机器语言(二进制指令)
将汇编指令翻译成二进制格式,生成各个section,生成符号表。

gcc mian.o -o main 链接
合并各个section,调整section的起始位移和段大小,合并符号表,进行符号解析,给符号分配虚拟地址

./main执行

gcc -o main main.c一步完成

gcc -c main.c gcc -o main main.o两步执行

gcc -o main main.c add.c max.c 多文件编译一步编译
gcc -c main.c /add.c/ max.c gcc -o main main.o add.o max.o两步多文件编译

Makefile文件

all :main
main :main.o add.o max.o
	gcc -o main main.o add.o max.o  gcc前面为Tab键
main.o :main.c
	gcc -c main.c
add.o :add.c
	gcc -c add.c
max.o :max.c
	gcc -c max.c
clean:
	rm -f *.o main

make执行Makefile时使用的命令

gdb 调试程序

每个进程运行后,默认会打开三个文件(类型file*
stdin 键盘,标准输入
stdout 屏幕 标准输出
stderr 屏幕,标准错误输出

gcc -o test test.c -g生成debug(才可调试 )下的test文件,之前的gcc是默认生成release模式

gdb test调试test文件,注意不是test.c

l 显示代码

b+行号下断点

info break 查看断点信息

r 启动程序

n单步执行

s进入函数

f退出函数(finish)

p查看某个变量的值(打印)

q退出调试

c跳到另一断点处

set follow-fork-mode child进入子进程调试

库文件:声明在/usr/include/stdio.h
定义:/lib/libc.so

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值