免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 812 | 回复: 0
打印 上一主题 下一主题

高级Linux编程之——进程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-12 16:10 |只看该作者 |倒序浏览
桌面系统中的ps命令可以查看进程。默认情况下,ps只显示当前终端和当前终端上所运行的进程,如果要查看系统中运行的所有进程,可以使用-e选项。另外,-o选项可以指定显示结果的格式,比如如下命令:
ps -e -o pid,ppid,user,start_time,command
分别显示pid,父进程的pid,运行进程的用户名,进程开始运行的时间和运行进程的命令。

创建进程的两种方式:
1、使用system
system是标准C库(Standard C library)中的一个函数。它可以像在终端中执行一条命令那样执行一个已经存在的可执行程序。它的去点是效率不高,而且比较危险。实际上,system函数创建了一个子进程来运行Bourne Shell,并用这个Shell来执行命令。比如,下面的程序和你在终端中执行"ls -l /"是一样的:
#include stdlib.h>
int main(void)
{
    int return_value;
    return_value = system("ls -l /");
    return return_value;
}
2、使用fork和exec
与第一种方式相比,这种方式更复杂,但是提供了更大的弹性,更好的速度和安全性。首先介绍fork函数。
在一个进程中调用fork函数会复制该进程,即产生一个子进程,父进程和子进程都从调用fork函数后独立运行。他们的不同之处是,父进程保持原来的pid,而子进程将获得一个新的pid。调用fork函数的返回值是pid_t类型的,在父进程中,fork返回子进程号,而在子进程中,fork函数返回0.所以,可以通过返回值来判断程序是运行在父进程中还是子进程中。
exec是一个函数族,它用另一个程序代替现在正在运行的进程。根据这个名字的不同,这个函数族中的函数有一些区别:
1)、函数名中含有p的,在当前目录下寻找程序;不含p的,需要给出程序的绝对路径。
2)、函数名中含有v的,接收一个以NULL结尾的指针数组作为参数;
3)、函数名中含有e的,接收一个额外的参数——以NULL结尾的指向char string的一个数组,该参数作为环境变量。
由于exec函数族用新的程序代替当前运行的进程,因此,除非该函数调用出错,否则该函数是不会返回的。使用exec函数传递参数时,和main函数使用的参数是一样的,即argv[0]表示的是程序的名称,在使用exec函数的时候要注意。
下面使用fork和exec来完成上面使用system函数完成的相同功能。不同的是,system使用Shell来执行程序,而这里我们是直接使用的ls命令。
#include stdio.h>
#include stdlib.h>
#include sys/types.h>
#include unistd.h>
int spawn (char* program, char** arg_list)
{
    pid_t child_pid;
    child_pid = fork ();
    if (child_pid != 0)
        return child_pid;
    else
    {
        execvp (program, arg_list);
        fprintf (stderr, “an error occurred in execvp\n”);
        abort ();
    }
}
int main ()
{
    char* arg_list[] = {
    “ls”,
    “-l”,
    “/”,
    NULL
    };
    spawn (“ls”, arg_list);
    printf (“done with main program\n”);
    return 0;
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/57747/showart_1962905.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP