linux程序设计 第一章:生成一个Process(进程)
2012-08-01 12:53
162 查看
第一章:生成一个Process(进程)
进程是什么?简单地说,进程就是在执行状态下的一个程序(包括CPU状态,所占内存的状态,等等)
A进程生成了B进程,也就是说,A程序在执行的时候,又生成了另一个进程B。这个时候,我们可以把A进程叫做父进程,把B进程叫做子进程。
例程序:
// Usage : ./a.out 20
#include
int main( int argc , char *argv[])
{
int dep_time;
dep_time = atoi( argv[1] )*60 ; //将参数中给出的20(分钟)转换成整型的秒数
if( fork()==0 ) //生成子进程,然后父进程中止
{
sleep( dep_time );
fprintf( stderr , !!!!!!!!\n);
}
return 0;
}
上面的程序是一个闹钟程序。当你执行之后。程序不会显示什么,而是一下就回到UNIX的提示符下。但是你在命令行中指定了20分钟后你有事,那么在你执行这个程序之后20分钟,他会提醒你到时间了。
本程序只是做示例用,没有检查参数是否正确,等等。
生成一个新的进程,可以使用 fork() 函数 。以下说说fork()函数。
头文件: #include
形式 pid_t fork();
参数 无
返回值 成功时: 父进程中:子进程的PID (Process ID)
子进程中:0
失败时: 父进程中:-1
由于失败,没有生成子进程;
fork()刚执行完的时候,子进程和父进程是完全一模一样的两份进程(当然,PID是不一样的)。他们的各个变量的值都是一样的,而且都认为自己已经执行完fork()了。fork()后,区分父进程和子进程,只要看fork()的返回值就行了。
if( fork()==0 ) printf(这是子进程);
else printf(这是父进程);
同理:
if( fork()==0 )
{
//接下来要子进程做的工作
}
else
{
//接下来要父进程做的工作
}
一般,我们会把fork()返回给父进程的值保存下来(其实就是子进程的PID),等到需要结束子进程的时候,我们关掉他,如下:
pid_t child_pid ;
child_pid=fork();
if( child_pid==0 )
{
// ... ...
}
else
{
// ... ...
}
// ... ...需要结束子进程的时候
kill( child_pid , SIGKILL ) // kill()函数是用来发给另一个进程一个消息的。以后再讲。
先写这些,试试手。喜欢就顶。要是没人爱看我就不写了。呵呵。省得大家说我乱贴垃圾。
以后计划贴的东西:
在程序中执行UNIX命令或者另一个程序
取得环境变量并利用
UNIX文件系统(在程序中取得分区信息,等等)
使用管道操作达到在各进程互相交流数据
信号(signal)
进程间共享内存
用message实现进程间共享信息
进程是什么?简单地说,进程就是在执行状态下的一个程序(包括CPU状态,所占内存的状态,等等)
A进程生成了B进程,也就是说,A程序在执行的时候,又生成了另一个进程B。这个时候,我们可以把A进程叫做父进程,把B进程叫做子进程。
例程序:
// Usage : ./a.out 20
#include
int main( int argc , char *argv[])
{
int dep_time;
dep_time = atoi( argv[1] )*60 ; //将参数中给出的20(分钟)转换成整型的秒数
if( fork()==0 ) //生成子进程,然后父进程中止
{
sleep( dep_time );
fprintf( stderr , !!!!!!!!\n);
}
return 0;
}
上面的程序是一个闹钟程序。当你执行之后。程序不会显示什么,而是一下就回到UNIX的提示符下。但是你在命令行中指定了20分钟后你有事,那么在你执行这个程序之后20分钟,他会提醒你到时间了。
本程序只是做示例用,没有检查参数是否正确,等等。
生成一个新的进程,可以使用 fork() 函数 。以下说说fork()函数。
头文件: #include
形式 pid_t fork();
参数 无
返回值 成功时: 父进程中:子进程的PID (Process ID)
子进程中:0
失败时: 父进程中:-1
由于失败,没有生成子进程;
fork()刚执行完的时候,子进程和父进程是完全一模一样的两份进程(当然,PID是不一样的)。他们的各个变量的值都是一样的,而且都认为自己已经执行完fork()了。fork()后,区分父进程和子进程,只要看fork()的返回值就行了。
if( fork()==0 ) printf(这是子进程);
else printf(这是父进程);
同理:
if( fork()==0 )
{
//接下来要子进程做的工作
}
else
{
//接下来要父进程做的工作
}
一般,我们会把fork()返回给父进程的值保存下来(其实就是子进程的PID),等到需要结束子进程的时候,我们关掉他,如下:
pid_t child_pid ;
child_pid=fork();
if( child_pid==0 )
{
// ... ...
}
else
{
// ... ...
}
// ... ...需要结束子进程的时候
kill( child_pid , SIGKILL ) // kill()函数是用来发给另一个进程一个消息的。以后再讲。
先写这些,试试手。喜欢就顶。要是没人爱看我就不写了。呵呵。省得大家说我乱贴垃圾。
以后计划贴的东西:
在程序中执行UNIX命令或者另一个程序
取得环境变量并利用
UNIX文件系统(在程序中取得分区信息,等等)
使用管道操作达到在各进程互相交流数据
信号(signal)
进程间共享内存
用message实现进程间共享信息
相关文章推荐
- 一个进程(Process)最多可以生成多少个线程(Thread)
- 一个进程(Process)最多可以生成多少个线程(Thread)
- windows 一个进程(Process)最多可以生成多少个线程(Thread)
- 一个进程(Process)最多可以生成多少个线程(Thread)
- 讨论:一个进程(Process)最多可以生成多少个线程(Thread)
- Unix/Linux如何创建一个后台进程(run background process)
- 一个进程(Process)最多可以生成多少个线程(Thread)
- 一个进程(Process)最多可以生成多少个线程(Thread),★firecat推荐★
- linux一天一个脚印:进程的管理
- 第六周——分析Linux内核创建一个新进程的过程
- Linux:如何查看一个进程的详细的启动时间
- 6.分析Linux内核创建一个新进程的过程
- linux下的单实例进程 - 一个进程不能重复启动
- Linux系统的守护进程(Daemon Process)
- Linux下多个进程或线程同时对一个文件进行写操作
- Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念
- [转] linux 下查看一个进程运行路径的方法
- linux内核分析第六周-分析Linux内核创建一个新进程的过程
- LINUX 进程控制程序设计
- 一个Linux C进程内存布局的验证程序的分析