LInux C进程控制作业——1

本文通过一个具体的代码示例,介绍了如何使用fork()函数创建子进程,子进程如何写入信息到文件,父进程如何读取并显示该信息,以及如何使用wait()函数获取子进程的状态信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目如下:

u创建子进程

u在子进程中打开文件file1,写入自己的“班级_姓名_学号”,

u父进程读取file1中的内容,并且打印显示。

u在父进程中获取已经结束的子进程的状态信息,打印该信息,并且打印结束的子进程的进程号。

代码如下:

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


int main()
{
 int pid = fork();
 int fd = open("1.txt",O_RDWR|O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO);
 if(pid == 0)
 {
   char str1[15] = "CLASS_NAME_ID";
   int bits1 = write(fd,str1,15);
   if(bits1 == -1)
   printf("write error");
 }
 else if(pid > 0)
 {
  sleep(1);
  char str2[15];
  int bits2 = read(fd,str2,15);
  if(bits2 == -1)
  printf("read error");
  else
  for(int i=0;i<15;i++)
  printf("%c",str2[i]);
  printf("\n");

  pid_t pid1;
  int status,i;
  pid1 = wait(&status);
  if(WIFEXITED(status))
  i = WEXITSTATUS(status);

 printf("Child's pid=%d .exit status=%d\n",pid1,i);

  printf("pid:%d\n",pid);
 }
 else
 {
  printf("fork error\n");
 }
 return 0;
}

学习目标有以下:

1,利用fork()函数创建子进程;

2,清楚处于子父进程的区别,并处理不同的代码段;

3,wait()函数与其相关宏的操作,得到子进程的相关信息;

### Linux 系统中的进程控制 #### 并发执行与独立性 在多进程环境中,父进程进程能够并发执行,彼此之间保持独立运行状态。操作系统利用进程调度算法来管理这些进程执行及其间片分配[^1]。这种机制确保了各个进程之间的独立性稳定性,在多进程环境下,每个进程都拥有自己的一套资源副本,从而防止了一个进程中发生的任何变化不会对其他进程造成影响[^2]。 #### 使用 `time` 命令监控进程性能 为了更好地理解优化程的表现,Linux 提供了内置工具——`time`命令用于测量特定应用程或脚本的执行效率。此命令提供了三种不同型的间度量: - **实际间 (real time)**:指从启动指令至其完全停止所经历的真实世界钟表上的流逝秒数; - **用户CPU间 (user CPU time)**:表示该过程消耗于用户模式下的中央处理器周期总数; - **系统CPU间 (system CPU time)**:记录的是由内核代表这个任务而使用的CPU周期数量。 值得注意的是,由于现代计算机通常会同处理多个作业,因此即使对于单个应用而言,“真实”的经过间可能会超过它真正占用过的全部CPU间之[^3]。 ```bash # 测量名为 example 的可执行文件所需的各种间开销 time ./example ``` #### 创建新进程的方法 创建新的子进程可以通过调用诸如fork()这样的函数实现。当成功返回两次—一次是在父亲那里得到正整数值作为孩子的PID, 外一次则是在孩子体内获得零值; 如果失败,则仅会在父母这边给出负的结果并设置errno变量以指示错误原因。 ```c #include <unistd.h> pid_t fork(void); ``` 此外还有vfork(), 它提供了一种更高效的派生方式但在某些方面受到更多限制;posix_spawn系列接口允许更加灵活地配置新进程属性的同也简化了一些场景下的编程模型。 #### 终止进程的方式 除了正常退出之外,还可以主动请求某个正在运行着的任务结束工作。kill() 函数发送信号给指定ID的目标对象告知对方采取相应行动(比如SIGTERM优雅关闭或者 SIGKILL强制杀死)。 ```c #include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值