日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

进程控制 (二) Others

發(fā)布時間:2023/11/30 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程控制 (二) Others 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 執(zhí)行新程序

只列出幾個常用的函數(shù):

#include <unistd.h> int execve(const char *path, char * const argv[], char * const envp[]);//envp[]為環(huán)境變量,可直接調(diào)用int execv(const char *path, char * const argv[]);//與execve()類似int execvp(const char * path, char * const argv[]);//path新程序的名稱

??正常情況下,這些函數(shù)不會返回,因為進程的執(zhí)行映像已經(jīng)被替換,沒有剖接收返回值的地方。若發(fā)生錯誤,則返回-1.
??新程序的進程保持了原來進程的進程ID、父進程ID、實際用戶ID和用戶組ID。同時,調(diào)用新程序后,原有的子進程的映像被替代,不再被執(zhí)行。

2. 等待進程結(jié)束

#include <sys/types.h> #include <wait.h>pid_t wait(int *statloc); pid_t waitpid(pid_t pid, int *statloc, int options);/*參數(shù)statloc指向的變量存放子進程的退出碼(int型),即從子進程main函數(shù)返回的值或子進程中exit函數(shù)的參數(shù) */

wait/waitpid有關(guān)宏定義:
??WIFEXITED(stat_val) : 子進程正常結(jié)束,該宏返回非零值;有異常,返回0
??WEXITSTATUS(stat_val) : 獲取子進程的退出碼

??由于stat_val的信息存儲在其二進制,難以直接讀取,故用宏來獲取退出碼。(子進程若exit(num), 則獲取的退出碼即num)

3. 進程ID

#include <sys/types.h> #include <unistd.h>int setuid(uid_t uid); int setgid(gid_t gid);

若進程具有root權(quán)限,則函數(shù)將實際用戶ID、有效用戶ID設(shè)置為uid;
若進程不具有root權(quán)限,但uid等于實際用戶ID,則致敬有效用戶ID設(shè)為uid;
若兩個條件都不滿足,函數(shù)調(diào)用是失敗,返回 -1 .

只有超級用戶進程才可以改變實際用戶ID.內(nèi)核對進程存取文件的許可權(quán)的檢查,是通過檢查進程的有效用戶ID來實現(xiàn)的,所以普通用戶可以通過暫時獲得root權(quán)限來操作文件。

4. 實現(xiàn)shell過程中的操作

1)readline函數(shù)庫

??調(diào)用該函數(shù)庫可直接實現(xiàn)命令行方向鍵的使用、光標移動、自動補全、查看命令歷史記錄。

int main() {char* input, shell_prompt[100];rl_bind_key('\t', rl_complete);for(;;) {snprintf(shell_prompt, sizeof(shell_prompt), "%s:%s $ ", getenv("USER"), getcwd(NULL, 1024));input = readline(shell_prompt);if (!input)add_history(input);free(input);//數(shù)組不用后要釋放,避免內(nèi)存泄露} }

2) vfork使用注意事項

??因為用vfork創(chuàng)建的子進程與父進程共享資源,包括堆棧區(qū)等數(shù)據(jù),如果在子進程使用return結(jié)束進程,在進程結(jié)束后系統(tǒng)會回收該進程鎖占用的資源,也就導致父進程在繼續(xù)運行時之前所有資源都已“消失”,會發(fā)生段錯誤,而使用exit退出時,則是直接退出進程,不會進行資源的回收,所以不會出錯。

3) Linux終端printf控制輸出顏色及格式

格式:

printf(“\033[字背景顏色;字體顏色m字符串\033[0m” );

printf(“\033[41;32m字體背景是紅色,字是綠色\033[0m\n”);

41是字背景顏色, 32是字體的顏色, 字體背景是紅色,字是綠色是字符串. 后面的\033[0m是控制碼.

顏色代碼:

字背景顏色范圍: 40--49 字顏色: 30--3940: 黑 30: 黑41: 紅 31: 紅42: 綠 32: 綠43: 黃 33: 黃44: 藍 34: 藍45: 紫 35: 紫46: 深綠 36: 深綠47: 白色 37: 白色

ANSI控制碼:

\033[0m 關(guān)閉所有屬性
\033[1m 設(shè)置高亮度
\03[4m 下劃線
\033[5m 閃爍
\033[7m 反顯
\033[8m 消隱
\033[30m – \033[37m 設(shè)置前景色
\033[40m – \033[47m 設(shè)置背景色
\033[nA 光標上移n行
\03[nB 光標下移n行
\033[nC 光標右移n行
\033[nD 光標左移n行
\033[y;xH設(shè)置光標位置
\033[2J 清屏
\033[K 清除從光標到行尾的內(nèi)容
\033[s 保存光標位置
\033[u 恢復光標位置
\033[?25l 隱藏光標
\33[?25h 顯示光標

友情鏈接:
http://blog.csdn.net/yi412/article/details/46867137
http://www.linuxidc.com/Linux/2011-03/32903.htm

總結(jié)

以上是生活随笔為你收集整理的进程控制 (二) Others的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。