linux下的进程控制编程

LINUX是一个多任务的操作系统,在同一个时间里,系统运行了多个进程。

但本质上LINUX系统一次只能运行一个程序。

LINUX系统运用的是一种叫进程调度的方式:在众多进程中选一个进程运行,其他进程等待。当它运行时间结束后换其他程序。每个程序运行时间很短,造成了系统在运行多个程序的错觉。

使用 TOP命令来看当前系统下的进程

PID 进程ID,用来区分进程

SUER 启动进程的用户ID

PR    动态优先级priority

NI 静态优先级nice,取值范围-20到19;值越低,占CPU能力越强,优先级越高

VIRT 占内存大小

RES 使用内存大小

SHR 共享内存大小

S 进程状态s睡眠  r运行  z僵尸进程

%cpu 占cpu时间百分比

%MEM 占用物理内存百分比

TIME+ 使用cpu时间总计

COMMAND 命令名

或者是ps -ef



其中PPID代表该进程的父进程

STIME是进程启动的时间

TTY 控制终端的ID



当我们要终止一个进程时可以使用 kill命令

kill  PID

有时候一个程序下会有多个PID 则使用 killall

killall  程序名

而获取该程序的PID可以在程序中添加 getppid()头文件是#include<unistd.h>

getppid()函数会返回该程序的PID

在一个程序下面创建一个子进程可以用 fork()头文件是#include<sys/types.h>#include<unistd.h>

fork()在子进程里返回的值是0;而在父进程返回的值是他的PID; 它的返回值我们可以定义一个进程变量来接受

pid_t a=fork();

可能不太好理解,举个例子

源代码:

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
   pid_t a;
   int b=0,c=0;
   a=fork();
   printf ( "第一处的PID是%d\n",getppid() );
   if ( 0!=a )
   {
a=1;
printf ( "我是父进程,我的PID是%d,a=%d,b=%d\n",getppid(),a,b );
   }
   else
   {
b=1;
printf ( "我是子进程,我的PID是%d,a=%d,b=%d\n",getppid(),a,b );
   }
   printf ( "最后一处的PID是%d\n",getppid() );
   return 0;
}
运行结果


可以看到该源代码出现了二个进程。

并且父进程的代码和子进程的代码相同;

因此他具有良好的并发性;

但是在fork() 创建之前,父进程的内存共享给子进程;之后,他俩对变量进行的修改或定义新的变量互不干扰;

而另一个创建子进程的函数vfork(),不同于fork(),

它的子进程与父进程在同一个地址空间,因此在子进程中对变量进行修改会影响父进程;

并且vfork()创建子进程,调用它时结尾必须调用exit(0)结束,否则子进程将不能结束;(虽然不会出现僵尸程序,但会提示段错误)


在这里扩展一个函数 execl() 头文件#include<unistd.h>

它的作用是在程序里打开一个可执行程序

用法: execl( “路径”,“参数 (没有可以不写)“,(char *)0)

例子: execl ( "/home/17712/1",(char *)0)17712目录下的1是个可执行程序
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值