码迷,mamicode.com
首页 > 系统相关 > 详细

linux进程

时间:2017-08-05 13:22:04      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:work   erro   pid_t   min   格式   kth   查看进程   创建   usr   

今天总结了一下学到的关于linux中进程的相关知识,下面是总结内容,希望对你帮助

                   

一、当ELF格式的程序执行时,内核就产生一个名为task_struct{}的结构体来表示这个进程,这个结构体
包括了进程的内存资源、CPU资源、文件、信号、各种锁资源等。

二、task_struct{}结构体的目录:/usr/src/linux-headers-3.5.0-23/include/linux/sched.h

三、查看进程的命令:ps -ef
例子:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 06:06 ? 00:00:00 /sbin/init
root 2 0 0 06:06 ? 00:00:00 [kthreadd]
root 3 2 0 06:06 ? 00:00:01 [ksoftirqd/0]
root 6 2 0 06:06 ? 00:00:00 [migration/0]
root 7 2 0 06:06 ? 00:00:00 [watchdog/0]
root 8 2 0 06:06 ? 00:00:00 [cpuset]
root 9 2 0 06:06 ? 00:00:00 [khelper]
root 10 2 0 06:06 ? 00:00:00 [kdevtmpfs]
root 11 2 0 06:06 ? 00:00:00 [netns]
root 12 2 0 06:06 ? 00:00:00 [sync_supers]
root 13 2 0 06:06 ? 00:00:00 [bdi-default]
root 14 2 0 06:06 ? 00:00:00 [kintegrityd]
root 15 2 0 06:06 ? 00:00:00 [kblockd]


四、查看进程关系的命令:pstree
例子:
init─┬─NetworkManager───{NetworkManager}
├─accounts-daemon───{accounts-daemon}
├─acpid
├─atd
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─colord───2*[{colord}]
├─console-kit-dae───64*[{console-kit-dae}]
├─cron
├─cupsd
├─2*[dbus-daemon]
├─dbus-launch
├─dconf-service───2*[{dconf-service}]
├─gconfd-2
├─geoclue-master
├─6*[getty]
├─gnome-keyring-d───6*[{gnome-keyring-d}]
├─gnome-terminal─┬─bash───pstree
│ ├─gnome-pty-helpe

可以看到大家都有一个共同的祖先:init,这个进程是没有父进程的,在子进程的父进程先退出之后,子进程
由init(祖先进程)收养

 

五、进程的创建
1、 创建一个进程:fork()  查看命令:man 2 fork

2、 头文件:#include(unistd.h)

3、函数原型: pid_t fork(void);
a、pid_t:进程PID号类型
b、void:不需要传递任何参数

4、返回值:
成功: 父进程中返回子进程的PID号(非零数),子进程中返回0
失败:返回-1,进程不会创建出来

5、当执行fork(),子进程和父进程执行的顺序是随机的

6、fork后子进程会继承父进程大部分的属性,包括信号阻塞掩码


六、进程的退出
(1)
1、头文件:#include <stdlib.h>

2、函数原型: void exit(int status);  查看命令:man 3 exit
a、status:正常退出:0
                   异常退出:非0

3、执行exit先冲洗缓冲区数据,关闭打开的文件,然后在退出进程


(2)
1、头文件:#include <unistd.h>

2、函数原型: void _exit(int status);
a、status:正常退出:0
                   异常退出:非0

3、直接走人,不会冲洗缓冲区,也不会关闭打开的文件(简单粗暴,说走就走)


两个函数都没有返回值

 


七、回收子进程资源

1、头文件: #include <sys/types.h>
                    #include <sys/wait.h>

2、函数原型: pid_t wait(int *status);
a、status:监听子进程退出状态的变量指针

3、返回值:
成功:退出进程的PID号
失败:-1

4、特点:会一直阻塞,直到子进程退出为止


八、获取进程的PID号
1、头文件: #include <sys/types.h>
                    #include <unistd.h>
2、函数原型: pid_t getpid(void); 获取自身的PID号

3、函数原型: pid_t getppid(void); 获取父进程的PID号

 

 

九、话不多说直接上代码

#include<stdio.h>
#include<unistd.h>
#include<wait.h>
#include<stdlib.h>
#include<sys/types.h>
#include<errno.h>

int main(int argc,char**argv)
{
pid_t pid; //pid用来存放进程的PID号

int status;//进程退出时用

pid = fork();//创建一个子进程,父进程中返回子进程的PID值(非0的数),子进程中返回0

if(pid == -1) //创建进程失败
{
perror("fork");
exit(1); //异常退出
}

if(pid != 0) //父进程
{
wait(&status);//阻塞,一直等到子进程退出为止,子进程正常退出为0,异常为非0
printf("I am fathre process ,my PID is [%d]\n",getpid());
printf("%d\n",status);//看看子进程是正常退出还是异常退出
}

if(pid == 0)//子进程
{
printf("I am child process,my PID is [%d],and my fathre PID is [%d]\n",getpid(),getppid());

exit(0);//正常退出为0,异常退出为非0
}

return 0;
}


linux进程

标签:work   erro   pid_t   min   格式   kth   查看进程   创建   usr   

原文地址:http://www.cnblogs.com/wurenzhong/p/7289864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!