进程和进程ID
头文件:
#include
pid_t getpid(void); # 获取当前进程号
pid_t getppid(void); # 获取父进程号(调用者)
例:
8 printf("hello world from process ID %d\n", getpid());
进程控制
#include
pid_t fork(void); # 创建一个新的进程,新进程是调用进程的复制品。
#include # exec函数有六种变体,统称为exec函数
extern char **environ;
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...); # 要求是以null结束的参数
int execle(const char *path, const char *arg,
..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
子进程调用execlp执行新程序文件,父进程希望等待子进程进程终止,这一要求由调用waitip实现,其参数指定要等待的进程。
例:
4 #include
5 #include
6 #include "../hd/ourhdr.h"
7
8 int main()
9 {
10 char buf[MAXLINE];
11 pid_t pid;
12 int status;
13
14 printf("%% "); /* print prompt (printf requires %% to print %)*/
15 while (fgets(buf, MAXLINE, stdin) != NULL) { /* fgets 一次读取一行 */
16 buf[strlen(buf) - 1] = 0; /* replace newline with null */
17
18 if ( (pid = fork()) < 0 ) /* 创建子进程 */
19 err_sys("fork error");
20
21 else if (pid == 0) { /* child */
22 execlp(buf, buf, (char *) 0); /* 子进程执行命令 */
23 err_ret("couldn't execute :%s", buf);
24 exit(127);
25 }
26
27 /* parent */
28 if ( (pid = waitpid(pid, &status, 0) ) < 0) /* 等待子进程结束 */
29 err_sys("waitpid error");
30 printf("%% ");
31 }
32 exit(0);
33 }
阅读(824) | 评论(0) | 转发(0) |