这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 进程状态 一

共2条 1/1 1 跳转至

进程状态 一

菜鸟
2017-11-26 17:32:37     打赏

    Linux是一个多用户多任务的操作系统,可以同时运行多个用户的多个程序,就必然会产生多进程,而每个进程都会有不同的状态。Linux的进程有以下6种状态:

    D:不可中断的深度睡眠状态,处于这种状态的进程不能响应异步信号;

    R:进程处于运行态或就绪状态,只有在改状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态;

    S:可中断的睡眠状态,处于这个状态的进程因为等待某种事件的发生而被挂起;

    T:暂停状态或跟踪状态;

    X:退出状态,进程即将被销毁;

    Z:退出状态,进程成为僵尸进程;

    Linux系统使用ps -aux命令可观察到进程的当前状态,STAT列的第一个字符显示的是进程的状态,可以看到大部分进程处于S状态。

main函数

    进程创建后通常调用exec族函数来装载程序文件的可执行映像,并在完成装载后调用程序的main()函数。在C程序中,main()函数通常是程序的执行起始点,有3种原型定义:

Int main()

Int main(int argc, char* argv[])

Int main(int argc, char* argv[], char* env[])

创建进程

    Linux系统使用fork()函数来创建一个新进程。fork()函数的原型如下:

#include <unistd.h>

pid_t fork(void);

     fork()函数从运行这的进程中分裂出一个子进程,它通过拷贝父进程的方式创建子进程。子进程与父进程有相同的代码空间、文件描述符等资源。

    进程创建后,子进程与父进程开始并发执行,执行顺序由内核调度算法来决定。

    fork()函数如果成功创建了进程,就会对父子进程各返回一次,其中对父进程返回子进程的PID,对子进程返回0;失败则返回小于0的错误码。

#Include <stdio.h>
#Include <unistd.h>
#include <stdlib.h>
 
int main(int argc, char * argv[])
{
    pid_t pid;
 
    pid = fork();
    if(pid==0)
    {
        printf("Here is child, my pid = %d, parents pid = %d\n", getpid(), getppid() );
    }
    else if(pid > 0)
    {
    printf("Here is parent, my pid = %d, child's pid = %d\n", getpid(), pid);
    }
    else
    {
        perror("fork error\n");
    }
    return 0;
}

 





关键词: 进程     状态    

专家
2017-11-26 21:07:01     打赏
2楼

谢谢楼主分享。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]