您的位置:首页 > 运维架构 > Linux

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缓冲区。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息