《進程測試題含答案》由會員分享,可在線閱讀,更多相關(guān)《進程測試題含答案(6頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、一、選擇題(每題2 分,共 40 分)1. 下列哪種打開文件的方式不能修改文件已有的內(nèi)容( B )A r+B rC w+D a+2. 以下哪種不是進程的狀態(tài)( B )A 運行態(tài)B 鎖定態(tài)C 睡眠態(tài)D 停止態(tài)3. 以讀寫方式打開一個已存在的標準I/O 流時應指定哪個mode 參數(shù) ( B )A rB r+C w+D a+4. fork()的返回值不可能是(C)C 1D 大于 10000 的正整數(shù)A -1B 05. 常用來進行多任務同步的機制是( B )A 管道B 信號量C 信號 (異步通信方式, 中斷機制的模擬) D共享內(nèi)存(本身不提供同步機制,可自行添加信號量實現(xiàn)同步 )信號量:解決進程線程之
2、間的同步與互斥問題的一種通信機制: 信號量變量和這個變量等待隊列 、 兩個原子操作(PV) .6. 下列哪個函數(shù)無法傳遞進程結(jié)束時的狀態(tài)AcloseB exitvoid exit( int status)7. 以下哪種用法可以等待接收進程號為A waitpid(pid, &status, 0)C waitpid(-1, &status, 0)( A )C _exitD returnpid 的子進程的退出狀態(tài)( A ) P59B waitpid(pid, &status, WNOHANG) D waitpid(-1, &status, WNOHANG)0。WNOHANG:子進程沒結(jié)束,不阻塞立即
3、返回,返回值為 0:阻塞父進程,直到子進程退出。8 . What kind of IPC has the highest efficiency ( B)A semaphoreB sharedmemoryC fifoD message queueE signal9 . 下列對無名管道描述錯誤的是( C )A 半雙工的通信模式B 有固定的讀端和寫端C 可以使用 lseek 函數(shù)D 只存在于內(nèi)存中10 .下列對于有名管道描述錯誤的是( D )A 可以用于互不相關(guān)的進程間B 通過路徑名來打開有名管道C在文件系統(tǒng)中可見D管道內(nèi)容保存在磁盤上11 .下列不屬于用戶進程對信號的響應方式的是(B )A忽略信號
4、B保存信號C捕捉信號D按缺省方式處理(1終止 SIGINT Ctrl+c, SIGINTQUIT 。 2 暫停 SIGSTOP 3 停止 SIGTSTPCtrl+z.。4 忽略 SIGCHILD12 .不能被用戶進程屏蔽的信號是(B )A SIGINTB SIGSTOPSIGKILLC SIGQUITD SIGILL 非法指令時發(fā)出13 .下列哪個是不帶緩存的(C )A stdinB stdoutC stderrD 都不是14 .下列不屬于IPC對象白是(A )A管道B共享內(nèi)存C消息隊列D信號燈IPC對象通過它的標識符來引用和訪問,這個標識符是一個非負整數(shù),它唯一的標識了一個IPC對象,這個I
5、PC對象可以是消息隊列或信號量或共享存儲器中的任意一種類型15 .如果鍵盤輸入為abcdef,程序如下所示,打印結(jié)果應該是 (A )char buffer6;fgets(buffer, 6, stdin); printf( %s, buffer);A abcde B abcdef C abcdef 后出現(xiàn)亂碼 D 段錯誤16 .用open()創(chuàng)建新文件時,若該文件存在則可以返回錯誤信息的參數(shù)是(B )A O_CREAT創(chuàng)建新文件)B O_EXCLC O_TRUNC娜J 除原有數(shù)據(jù))DO_NOCTTYint open( const char pathname, int flags, int pe
6、rms)17 .下列不是用戶進程白組成部分的是(D )A正文段B用戶數(shù)據(jù)段C系統(tǒng)數(shù)據(jù)段D elf段進程是由 進程控制塊、程序段、數(shù)據(jù)段三部分組成18 .以下哪種方法無法查看進程的信息(C )A psB查看 /proc 目錄C killD topLinux系統(tǒng)中每一個進程都會有/proc文件系統(tǒng)下的與之對應的一個目錄(init進程信息存放在/proc/1目錄下)。19 .默認情況下,不會終止進程的信號是(D )A SIGINTB SIGKILLC SIGALRMD SIGCHLD20 . fread()返回值的含義是(B )A讀取的字節(jié)數(shù)B讀取的對象數(shù)C緩沖區(qū)的首地址D 0size_t frea
7、d (void *ptr, size_t size, size_t nmemb, FILE *stream);二、簡答題(30分)1 .請描述進程和程序的區(qū)別(5分)進程和程序的區(qū)別程序是靜態(tài)的,它是一些保存在 磁盤上的指令的有序集合,沒有任何執(zhí)行的概念進程是一個動態(tài)的概念,它是程序執(zhí)行的過程,包括創(chuàng)建、調(diào)度和消亡進程是一個獨立的可調(diào)度的任務進程是一個抽象實體。當系統(tǒng)在執(zhí)行某個程序時,分配和釋放的各種資源進程是一個程序的 一次執(zhí)行的過程進程是程序執(zhí)行和資源管理的最小單位2 .指出靜態(tài)庫和共享庫的區(qū)別(使用方法,對程序的影響)(5分)靜態(tài)庫在程序 編譯時會被連接到目標代碼中,程序運行時將不再需要
8、該 靜態(tài)庫,因此體積較大。動態(tài)庫在程序編譯時并 不會被連接 到目標代碼中,而是在程序運行是才被載入,因此在程序運行時還需要動態(tài)庫存在,因此代碼體積較小。3 .寫出設置信號處理函數(shù)和用戶定義的信號處理函數(shù)的原型(5分)void (*signal(int signum, void (*handler)(int)(int);typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);void driver_handler(int signo);void(*handler)( int);
9、handler, 一個指向函數(shù)的指針,該函數(shù)有一個int參數(shù),返回void。T*signal(intsigno,P), P=void(*handler)( int);signal, 一個函數(shù),該函數(shù)有 2個參數(shù)(signo,P),返回類型T的指針。void(T)(int), T=signal(intsigno,P)T, 一個函數(shù),該函數(shù)有一個 int參數(shù),返回void。4.程序代碼如下,請按執(zhí)行順序?qū)懗鲚敵鼋Y(jié)果(10分)int main() pid_t pid1,pid2;0)if(pid1=fork()進程狀態(tài)圖*運行態(tài)schedule(l時間片到擁有CPU$1理edu炊口 iptil 必
10、0MGCONT停止愈用文件IO分別實現(xiàn)標準IO中的(r, r+, w, w+, a, a+),文件名由argv1傳入程序.(O_RDONLYO_WRONLYO_RDWR, O_CREAT, O_TRUNC, O_APPEND)的 int open (const char pathname, int flags, int perms);r :r+:w:w+:a:a+:open (argv1,O_RDONLY ;open (argv1,O_RDWR);open(argv1,O_WRONLY | O_CREAT | O_TRUNC,0666);open(argv1,O_RDWR | O_CREAT
11、| O_TRUNC,0666);open(argv1,O_WRONLY | O_CREAT | O_APPEND,0666);open(argv1,O_RDWR | O_CREAT | O_APPEND,0666);4.編寫程序?qū)崿F(xiàn)如下功能(10分):從argv1所指定的文件中讀取內(nèi)容,依次寫到管道/home/linux/myfifo 中從管道/home/linux/myfifo中讀取內(nèi)容,寫到 argv1所指定的文件中并保存代碼中可省略頭文件,/home/linux/myfifo 無需創(chuàng)建int main(int argc, const char *argv) int fd,fd_src;c
12、har buf32;int bytes;if(argc 2)printf(Usage %s src_filen,argv0); return -1;if(fd = open(/home/linux/myfifo,O_WRONLY ) 0) perror(fail to open);return -1;if(fd_src = open(argv1,O_RDONLY) 0)write(fd,buf,bytes);close(fd);close(fd_src);return 0;int main(int argc, const char *argv)int fd,fd_dest;char buf32;int bytes;if(argc 2) printf(Usage %s dest_filen,argv0);return -1;if(fd = open(/home/linux/myfifo,O_RDONLY) ) 0) perror(fail to open);return -1;if(fd_dest = open(argv1,O_WRONLY | O_CREAT | O_TRUNC,0666) 0) write(fd_dest,buf, bytes);close(fd);close(fd_dest);return 0;