博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux进程1
阅读量:5017 次
发布时间:2019-06-12

本文共 2404 字,大约阅读时间需要 8 分钟。

进程是os中非常重要的一个概念,也是十分基础的概念,十分重要。以下是自己学习的一点学习笔记,是个人见解,欢迎批评指正。

    1、看看unix标准对于进程的定义:“一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源”。线程站且放到后面介绍。 计算程序就是数据结构和算法的组合。其中算法就是实现功能的方法,而数据结构就是实现算法采用的数据结构,其实也包括实现的代码。简单理解,进程是正在运行的程序,每个运行中的程序都可以看作一个进程。linux是支持多个进程同时运行的,这个也很容易理解,比如我现在写着blog和听歌,就运行这浏览器和播放器两个进程。

    当然进程并不是简单的执行中的代码那么简单,还包括其他的系统资源,例如打开的文件,挂起的信号,内核内部数据,处理器状态,地址空间及一个或多个执行线程,当然还包括用来存放全局变量的数据段。关于linux中进程和线程的之间的关系和区别暂时不介绍,留在后续文章中。

     2、进程的查看。ps命令提供一种查看进程相关状态信息,包括进程PID、进程状态、进程所持有的用户名等等。

~$ ps -efUID        PID  PPID  C STIME TTY          TIME CMDroot         1     0  0 11:04 ?        00:00:01 /sbin/initroot         2     0  0 11:04 ?        00:00:00 [kthreadd]root         3     2  0 11:04 ?        00:00:01 [ksoftirqd/0]root         5     2  0 11:04 ?        00:00:00 [kworker/0:0H]root         7     2  0 11:04 ?        00:00:10 [rcu_sched]root         8     2  0 11:04 ?        00:00:00 [rcu_bh]root         9     2  0 11:04 ?        00:00:01 [migration/0]root        10     2  0 11:04 ?        00:00:00 [watchdog/0]

  这里仅仅查看列举了本机中前10进程的相关信息。其中比较重要的两个标识符为:PID为进程标识符,PPID为父进程的进程标识符。UID为用户的标识符,这里为超级用户root。其他的还涉及到时间(STIME,TIME),TTY为标准输出终端,CMD为命令行。通过ps命令组合不同的查看选项,可以查看进程很多信息。这里并不一一介绍,读者可以通过man ps命令来了解相关的信息,有比较详细的文档说明。

        3、进程的创建。linux内核在创建一个新的进程时,通过复制当前进程的来达到创建新进程的目的。新进程成为子进程而源进程为父进程,两者几乎一模一样,两者主要通过PID值来区分。新的进程在创建的程序处开始执行,并且共享父进程的代码。下面有个例子。

#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
 
int
main()
{
   
pid_t pid;
   
char
*message;
   
int
n;
   
printf
(
"fork program starting\n"
);
   
pid=fork();
   
   
if
(pid==-1){
       
perror
(
"fork failed"
);
       
exit
(1);
   
}
   
else
if
(pid==0){
       
message=
"this is the child"
;
       
n=5;
   
//  sleep(n);
   
}
   
else
{
       
message=
"this is the parent"
;
       
n=3;
   
//  sleep(n);
   
}
   
for
(;n>0;n--){
       
puts
(message);
       
sleep(1);
   
}
   
exit
(0);
}

程序执行结果如下:

$ ./fork1 fork program starting

this is the parent

this is the child

this is the parent

this is the child

this is the parent

this is the child

this is the child

this is the child   

      linux提供fork系统调用来创建新的进程。fork进程新创建的进程就会下一条指令处开始执行,那么系统是如何区分父亲进程和子进程的呢。当主要还是通过fork进程放回的pid来确定的,子进程的pid返回值为0而浮进程为1。关于fork的用法可以查阅doc,有比较详细的介绍。

 DESCRIPTION

       fork()  creates  a new process by duplicating the calling process.  The new process, referred to as the child, is an  exact  duplicate  of  the calling  process,  referred  to as the parent, except for the following  points:
        其实上面的那个小程序还有点小bug,在这里先放一下,后续会提到,主要原因就是父进程比子进程先终结,白发送青巳,老子死了儿子没长大,谁抚养呢。

 

转载于:https://www.cnblogs.com/farbeyond/p/5199603.html

你可能感兴趣的文章
display:flow-root
查看>>
判读字符串是否为空的全局宏-分享
查看>>
22-reverseString-Leetcode
查看>>
Centos 开机自动联网
查看>>
cocos2dx使用lua和protobuf
查看>>
HDOJ 5630 Rikka with Chess
查看>>
netcore2.1 在后台运行一个任务
查看>>
DOCKER 从入门到放弃(五)
查看>>
Python 多线程学习
查看>>
获取NVIDIA显卡的温度
查看>>
Dijkstra算法
查看>>
Deep Learning 9: Performance
查看>>
面试题61 把二叉树打印成多行
查看>>
第二章 Vue快速入门--20 品牌案例-完成品牌列表的添加功能+ 21 品牌案例-根据Id完成品牌的删除...
查看>>
编译安装mysql-5.6.40
查看>>
SGU438_The Glorious Karlutka River =)
查看>>
Linux集群及LVS简介
查看>>
简单几何(直线与圆的交点) ZOJ Collision 3728
查看>>
Codeforces Round #327 (Div. 2)
查看>>
如何解决Provisional headers are shown问题(转)
查看>>