進程控制

環境變量

extern char **environ;
int i=0;
while(environ[i])
     puts(environ[i++]);
#include <stdlib.h>
atexit(void (*function)(void))
用於註冊進程終止時調用的函數,參數爲指向該函數的指針(函數名)。
char *getenv(char *name)
用於獲得特定環境變量的值。
int setenv(const char *name, const char *value, int override)
用於設定環境變量的值,將value拷貝到內存中的環境變量區域。override==1時改變已有的環境變量值。成功返回0,失敗返回-1。
int putenv(const char *str)
str格式爲name=value,不會改變內存中的環境變量區域,只對該進程有效,不會傳遞到父進程。
int clearenv(void)
清除所有環境變量,並使environ=NULL。
int unsetenv(const char *name)
清除特定環境變量的值。
進程編程
#include <setjmp.h>
int setjmp(jmp_buf env)
將寄存器的值保存在env中,以供longjmp調用。返回值默認爲0,當通過longjmp調用時,返回值由longjmp提供。
void longjmp(jmp_buf env, int val)
跳轉到env所保存的位置,使setjmp所在函數中的自動變量恢復到第一次調用setjmp時保存的值,並將val傳遞給setjmp作爲返回值。
若以volatile說明一個變量並在gcc中打開-O參數,則該變量在longjmp時保持其值不變。
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void)
獲得自己的進程ID。
pid_t getppid(void)
獲得父進程的ID。
pid_t fork(void)
創建一個進程,該進程由其父進程完全複製而來。
返回-1:失敗;返回0:子進程開始執行;返回>0:父進程開始執行,返回的是子進程的進程號。這由操作系統決定。
(初始父子進程共享同一塊數據,一旦父或子進程有寫操作,則會創建新的數據區域,因此父子進程之間不會互相干涉)
pit_t vfork(void)
創建一個進程,與父進程共享數據和堆棧,子進程的操作會反映在父進程中。
子進程將總是先運行,且必須通過exit或exec終止。
一般用法是創建與父進程完全無關的子進程,並通過exec分配自己的資源。
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status)
wait函數只要任意一個子進程結束,就會返回該子進程ID,如果出錯則返回-1。
status爲子進程返回的狀態,需要通過宏WIFEXITED和WEXITSTATUS最終獲得返回狀態。
pid_t waitpid(pid_t pid, int *status, int options)
waitpid可以指定某個進程id或者進程組id,參數pid說明如下:
  •   pid==-1 等待任意一個進程結束,此時與wait等效。

  •   pid>0  等待與pid相符的子進程結束。

  •   pid==0 等待組ID等於調用者進程組ID的任意進程結束。

  •   pid<-1 等待組ID等於|pid|的任意進程結束。

參數options的取值及其含義如下:
  •    WNOHANG:該選項要求如果沒有子進程退出就立即返回。  

  •    WUNTRACED:對已經停止但未報告狀態的子進程,該調用也從等待中返回和報告狀態。如果status不是空,調用將使status指向該信息。下面的宏可以用來檢查子進程的返回狀態。前面三個用來判斷退出的原因,後面三個是對應不同的原因返回狀態值:

  •    WIFEXITED(status):如果進程通過系統調用_exit或函數調用exit正常退出,該宏的值爲真。

  •    WIFSIGNALED(status):如果子進程由於得到的信號(signal)沒有被捕捉而導致退出時,該宏的值爲真。

  •    WIFSTOPPED(status):如果子進程沒有終止,但停止了並可以重新執行時,該宏返回真。這種情況僅出現在waitpid調用中使用了WUNTRACED選項。

  •    WEXITSTATUS(status):如果WIFEXITED(status)返回真,該宏返回由子進程調用_exit(status)或exit(status)時設置的調用參數status值。  

  •    WTERMSIG(status):如果WIFSIGNALED(status)返回爲真,該宏返回導致子進程退出的信號(signal)的值。  

  •    WSTOPSIG(status):如果WIFSTOPPED(status)返回真,該宏返回導致子進程停止的信號(signal)值。

#include <unistd.h>
int execl( const char *path, const char *arg, ...)
int execlp( const char *file, const char *arg, ...)
int execle( const char *path, const char *arg , ..., char* const envp[])
int execv( const char *path, char *const argv[])
int execve( const char *filename, char *const argv [], char *const envp[])
int execvp( const char *file, char *const argv[])
執行一個exe程序來替換當前進程的執行映像。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章