Linux下进程管理与控制
2012-05-12 08:15
381 查看
1.创建进程:
extern __pid_t fork(void);
成功则在父进程中返回子进程的PID;在子进程中则返回0,以区别父子进程。
失败则在父进程中返回-1;
说明:子进程从创建后和父进程「同时」执行;竞争系统资源,子进程的执行位置为fork的返回位置。
extern __pid_t vfork(void);
成功则在父进程中返回子进程的PID;在子进程中则返回0,以区别父子进程。
失败则在父进程中返回-1;
在执行过程中,fork()和vfork()函数有一定的区别,for()函数是拷贝一个父进程的副本,从而拥有自己独立的代码段、数据段以及堆栈空间,即成为一个独立的实体;而vfork()是共享父进程的代码段以及数据段。
注意:在使用vfor()时,必须在子进程中调用exit()函数调用,否则会出现:__new_exitfn: Assertion `l != ((void *)0)' failed 错误!而且,现在这个函数已经被废弃使用了!
2.在进程中运行新代码:exec系列函数,它们并不关闭原来的文件描述符。
extern int execl (__const char * __path, __const char *__arg, ...);
第一个参数:文件路径(绝对路径)
第二个参数:代表执行文件时传递的argv
最后一个参数:必须是空指针。
extern int execle (__const char * __path, __const char *__arg, ...);
第一个参数:文件路径(绝对路径)
第二个参数:代表执行文件时传递的argv
最后一个参数:必须指向一个新的环境变量数组,此数组即成为新执行程序的环境变量。
extern int execlp(__const char *__file, __const char *__arg, ...);
execlp会从PATH环境变量所指的目录中查看符合参数file的文件名,找到后执行该文件;
第二人参数为执行文件时传递的argv[0]
最后一个参数必须用空指针NULL
extern int execv(__const char *__path, char * __const__argv[]);
第一个参数:用来执行参数path字符串所代表的文件路径;
第二个参数必须用数据指针来传递给执行文件
extern int execvp(__const char *__file, char * __const __argv[]);
第一个参数:从PATH环境变量所指的目录中查找文件file,然后执行
第二个参数是传递给file的参数。
extern int system(__const char *__command);
它用来创建新进程,并在此进程中运行新进程,直到新进程结束后才继续运行父进程。子进程退出后会返回退出状态。
3.等待进程结束:
extern __pid_t wait (__WAIT_STATUS __stat_loc);
调用wait函数的父进程将等待该进程的任意一个子进程结束后才继续执行(如果有多个子进程,只需要等待其中的一个进程)。成功则返回当前结束的子进程的PID,同时,将子进程的退出时的状存储在__stat_loc中。
4.等待子进程结束:
extern __pid_t waitpid(__pid_t __pid, int * __stat_loc, int __options);
pid>0,表示等待进程pid为pid的进程结束
pid=-1, 表示等待任意进程结束
pid=0,表示等待与当前进程的进程组PGID一致的进程结束
pid<-1,表示等待进程组PGID是此值的绝对值的进程结束。
第二个参数为调用它的函数中某个变量地址,如果执行成功,则用来存储结束进程的结束状态
第三个参数为等待选项。可设为0;亦可为WNOHANG和WUNTRACED
3.退出进程:
extern void abort(void);
用来中止进程
extern int atexit((void *__func)(void) );
注册一个函数在exit退出时调用。
extern int on_exit (void (*__func) (int __status, void * __arg), void * __arg);
它用来设置一个程序正常结束前调用的函数。当程序通过调用exit()或者从main中返回时,参数func所指定的函数先会被调用,然后才是真正由exit()结束程序。参数arg指针会传给func函数。
extern void exit(int __status);
用来正常结束当前进程的执行,并把参数返回给父进程,而进程所有的缓冲区数据会自动写回并关闭文件。
4.修改进程用户相关信息:
extern int access (__const char *__name, int __type);
type:
#define R_OK 4
#define W_OK 2
#define X_OK 1
#define F_OK 0
成功则返回0;失败则返回-1
5.
执行成功没有返回值,否则返回-1.
extern void _exit(int status);
用来正常结束当前进程的执行,把参数status返回给父进程,并关闭文件。它不会处理标准I/O缓冲区。
extern __pid_t fork(void);
成功则在父进程中返回子进程的PID;在子进程中则返回0,以区别父子进程。
失败则在父进程中返回-1;
说明:子进程从创建后和父进程「同时」执行;竞争系统资源,子进程的执行位置为fork的返回位置。
extern __pid_t vfork(void);
成功则在父进程中返回子进程的PID;在子进程中则返回0,以区别父子进程。
失败则在父进程中返回-1;
在执行过程中,fork()和vfork()函数有一定的区别,for()函数是拷贝一个父进程的副本,从而拥有自己独立的代码段、数据段以及堆栈空间,即成为一个独立的实体;而vfork()是共享父进程的代码段以及数据段。
注意:在使用vfor()时,必须在子进程中调用exit()函数调用,否则会出现:__new_exitfn: Assertion `l != ((void *)0)' failed 错误!而且,现在这个函数已经被废弃使用了!
2.在进程中运行新代码:exec系列函数,它们并不关闭原来的文件描述符。
extern int execl (__const char * __path, __const char *__arg, ...);
第一个参数:文件路径(绝对路径)
第二个参数:代表执行文件时传递的argv
最后一个参数:必须是空指针。
extern int execle (__const char * __path, __const char *__arg, ...);
第一个参数:文件路径(绝对路径)
第二个参数:代表执行文件时传递的argv
最后一个参数:必须指向一个新的环境变量数组,此数组即成为新执行程序的环境变量。
extern int execlp(__const char *__file, __const char *__arg, ...);
execlp会从PATH环境变量所指的目录中查看符合参数file的文件名,找到后执行该文件;
第二人参数为执行文件时传递的argv[0]
最后一个参数必须用空指针NULL
extern int execv(__const char *__path, char * __const__argv[]);
第一个参数:用来执行参数path字符串所代表的文件路径;
第二个参数必须用数据指针来传递给执行文件
extern int execvp(__const char *__file, char * __const __argv[]);
第一个参数:从PATH环境变量所指的目录中查找文件file,然后执行
第二个参数是传递给file的参数。
extern int system(__const char *__command);
它用来创建新进程,并在此进程中运行新进程,直到新进程结束后才继续运行父进程。子进程退出后会返回退出状态。
3.等待进程结束:
extern __pid_t wait (__WAIT_STATUS __stat_loc);
调用wait函数的父进程将等待该进程的任意一个子进程结束后才继续执行(如果有多个子进程,只需要等待其中的一个进程)。成功则返回当前结束的子进程的PID,同时,将子进程的退出时的状存储在__stat_loc中。
4.等待子进程结束:
extern __pid_t waitpid(__pid_t __pid, int * __stat_loc, int __options);
pid>0,表示等待进程pid为pid的进程结束
pid=-1, 表示等待任意进程结束
pid=0,表示等待与当前进程的进程组PGID一致的进程结束
pid<-1,表示等待进程组PGID是此值的绝对值的进程结束。
第二个参数为调用它的函数中某个变量地址,如果执行成功,则用来存储结束进程的结束状态
第三个参数为等待选项。可设为0;亦可为WNOHANG和WUNTRACED
3.退出进程:
extern void abort(void);
用来中止进程
extern int atexit((void *__func)(void) );
注册一个函数在exit退出时调用。
extern int on_exit (void (*__func) (int __status, void * __arg), void * __arg);
它用来设置一个程序正常结束前调用的函数。当程序通过调用exit()或者从main中返回时,参数func所指定的函数先会被调用,然后才是真正由exit()结束程序。参数arg指针会传给func函数。
extern void exit(int __status);
用来正常结束当前进程的执行,并把参数返回给父进程,而进程所有的缓冲区数据会自动写回并关闭文件。
4.修改进程用户相关信息:
extern int access (__const char *__name, int __type);
type:
#define R_OK 4
#define W_OK 2
#define X_OK 1
#define F_OK 0
成功则返回0;失败则返回-1
5.
执行成功没有返回值,否则返回-1.
extern void _exit(int status);
用来正常结束当前进程的执行,把参数status返回给父进程,并关闭文件。它不会处理标准I/O缓冲区。
相关文章推荐
- Linux进程查看与管理、作业控制、网络客户端工具
- Supervisor Linux进程控制管理
- 轻松学习Linux之理解进程的管理与控制
- Linux进程之管理控制
- Linux的进程管理和作业控制
- Linux进程之管理控制
- Linux进程管理与作业控制
- linux--进程管理与控制
- linux进程管理与作业控制
- 轻松学习Linux之理解进程的管理与控制
- Linux 进程管理 以及 作业控制
- Linux 124课程 8、管理本地的Linux用户和组、控制服务和守护进程
- Linux_系统管理_进程控制_1
- Linux基础--进程管理和作业控制
- linux -- 进程管理和作业控制
- Linux之进程控制与管理实验五
- Linux之进程控制与管理at命令(定时执行)
- Linux进程管理与作业控制
- Linux的进程管理和作业控制
- 轻松学习Linux之理解进程的管理与控制