Linux应用编程—1.线程与进程
1 重要概念
1.1 程序
程序指的是还没有运行起来的源代码,比如电脑上安装的“Keil MDK”、“Xshell”等等。
1.2 进程
Win10环境下,打开任务管理器,能看到有“进程”一栏,点击进去能看到5个应用以及132个后台进程。光看5个应用进程的话,正是正在运行着的程序。所以进程就是正在运行着的程序。
1.3 线程
线程(thread)是操作系统进行调度的最小单位。一个进程可以并发多个线程,每个线程可以执行不同的任务。同一个进程的多个线程共享该进程中的全部系统资源,但每个线程有各自的调用栈、寄存器组以及线程本地存储。
1.4 任务
CPU具体要做的事情。
2 Linux
在linux系统下,每一个进程都有自己的id号,查看这个id号也有linux系统提供给我们的库函数来实现。通常这个进程的id号被叫做“pid”,指的是“process id”。
2.1 Linux下查看进程id
2.1.1 终端下执行man getpid
可以看到调用该函数时需要包含的头文件,以及函数的描述。
2.1.2 getpid()
pid_t getpid(voiud);
该函数用来返回id的进程号,无须入参,返回值是一个自建类型pid_t。还能看到一个函数:
pid_t getppid(void);
阅读函数描述可以知道,该函数用来返回进程的父进程的id号,同样不需要入参以及返回一个pid_t的自建类型。知道了两个函数,现在编程来查看进程id号。
2.2 编程
2.2.1 源码实现
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main(void)
{
pid_t pid;
pid_t pid_1;
while(1)
{
pid = getpid(); // get process id
printf("pid = %d.\n", pid);
pid_1 = getppid(); // get parent process id
printf("pid_1 = %d.\n", pid_1);
printf("Hello World!\n");
sleep(1);
}
return 0;
}
运行结果:
pid = 12913.
pid_1 = 2113.
Hello World!
每隔1秒钟打印一次~
2.2.2 进程树
新建一个终端,在命令行输入“man pstree”。
以树的方式显示进程。输入pstree -p,在如下树中,根据之前代码打印的id号可以找到。可以看到./a.out的进程号为12913。
3 总结
Linux应用编程中线程与进程是两个非常重要的概念,本次我们先熟悉了如何查看进程id号以及父进程id号两个函数。