11_Linux系统之进程

  1. 什么是程序?

    编译好的二进制文件。

  2. 什么是进程?

    • 运行着的程序,空间上的概念。
    • 程序员的角度:运行一系列指令的过程
    • 操作系统的角度:分配系统资源的基本单位
  3. 程序与进程有何区别?

    • 程序占用的是磁盘,不占用系统资源
    • 内存占用系统资源
    • 一个程序可以有多个进程,但是一个进程只能对应一个程序
    • 程序没有声明周期,进程有声明周期
  4. fork()函数

    • 依赖的头文件
    #include <unistd.h>
    • 函数定义
    pid_t fork(void);
    • fork()函数作用

      在32位系统中,子进程复制父进程的0到3G空间和父进程内核中的PCB,但id号不同,同时fork调用一次返回两次。

    • fork()函数特点:

      • 父进程中返回子进程ID
      • 子进程中返回0
      • 读时共享,写时复制
    • fork()函数原理图

  5. 获取进程ID函数

//当前进程id
pid_t getpid(void);
//父进程id
pid_t getppid(void);
  1. Linux控制命令

    • ps 查看进程信息

      • ps aux

      • ps ajx---可以追述进程之间的血缘关系

    • kill 命令

      • 给进程发送一个信号
      • SIGKILL 9号信号,强制杀死
      • kill -SIGKILL pid---杀死进程
  2. fork()函数小案例

#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <time.h>
#include <string.h>
#include <pwd.h>
#include<sys/types.h>

void test_fork()
{
    printf("Begin...\n");
    pid_t pid =  fork();
    if (pid < 0)
    {
       perror("fork err");
       exit(1);
    }
    if (pid == 0)
    {
       printf("i am child, pid = %d, ppid = %d\n", getpid(), getppid());
       while (1)
       {
          printf("i am child\n");
          sleep(1);
       } 
    }
    else if(pid > 0)
    {
        printf("i am parent, childpid = %d, self = %d, ppid = %d\n", pid, getpid(), getppid());
        while (1)
        {
            sleep(1);
        }
       
    }
    printf("End...\n");
}
int main()
{
    test_fork();
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/LittleFishC/p/12532085.html