《進程測試題含答案》由會員分享,可在線閱讀,更多相關(guān)《進程測試題含答案(6頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、一、選擇題 (每題 2 分,共 40 分)
1. 下列哪種打開文件的方式不能修改文件已有的內(nèi)容 ( B )
[A] r+ [B] r [C] 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] r
[B] r+ [C] w+ [D] a+
4. fork()的返回值不可能是(C)
[C] 1 [D] 大于 10000 的正整數(shù)
[A] -1 [B] 0
5. 常用來進行多任務同步的機制
2、是 ( B )
[A] 管道 [B] 信號量 [C] 信號 (異步通信方式, 中斷機制的模擬) [D]
共享內(nèi)存 (本身不提供同步機制,可自行添加信號量 實現(xiàn)同步 )
信號量:解決進程 線程之間的同步與互斥問題的一種通信機制: 信號量變量 和這個變量
等待隊列 、 兩個原子操作( PV) .
6. 下列哪個函數(shù)無法傳遞進程結(jié)束時的狀態(tài)
[A]close [B] exit
void exit( int status)
7. 以下哪種用法可以等待接收進程號為
[A] waitpid(pid, &status, 0)
[C] waitpid(-1, &status, 0)
(
3、A )
[C] _exit
[D] return
pid 的子進程的退出狀態(tài) ( A ) P59
[B] waitpid(pid, &status, WNOHANG) [D] waitpid(-1, &status, WNOHANG)
0。
WNOHANG:子進程沒結(jié)束,不阻塞立即返回,返回值為 0:阻塞父進程,直到子進程退出。
8 . What kind of IPC has the highest efficiency ( B)
[A] semaphore
[B] sharedmemory
[C] fifo
[D] message queue
E signal
4、
9 . 下列對無名管道描述錯誤的是 ( C )
[A] 半雙工的通信模式
[B] 有固定的讀端和寫端
[C] 可以使用 lseek 函數(shù)
[D] 只存在于內(nèi)存中
10 .下列對于有名管道描述錯誤的是 ( D )
[A] 可以用于互不相關(guān)的進程間
[B] 通過路徑名來打開有名管道
[C]在文件系統(tǒng)中可見
[D]管道內(nèi)容保存在磁盤上
11 .下列不屬于用戶進程對信號的響應方式的是 (B )
[A]忽略信號 [B]保存信號 [C]捕捉信號 [D]按缺省方式處理(1
終止 SIGINT Ctrl+c, SIGINTQUIT 。 2 暫停 SIGSTOP 3 停止 SIGTST
5、PCtrl+z.。4 忽略 SIGCHILD
12 .不能被用戶進程屏蔽的信號是 (B )
[A] SIGINT [B] SIGSTOPSIGKILL [C] SIGQUIT [D] SIGILL 非法指
令時發(fā)出
13 .下列哪個是不帶緩存的(C )
[A] stdin [B] stdout [C] stderr [D] 都不是
14 .下列不屬于IPC對象白^是(A )
[A]管道 [B]共享內(nèi)存 [C]消息隊列 [D]信號燈
IPC對象通過它的標識符來引用和訪問,這個標識符是一個非負整數(shù),它唯一的標識了一個
IPC對象,這個IPC對象可以是消息隊列或信號量或共享存儲器中
6、的任意一種類型
15 .如果鍵盤輸入為abcdef,程序如下所示,打印結(jié)果應該是 (A )
char buffer[6];
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_EXCL [C] O_TRUNC娜J 除原有數(shù)據(jù)) [D]
O_NOCTTY
int open( const char "pathname,
7、int flags, int perms)
17 .下列不是用戶進程白組成部分的是 (D )
[A]正文段 [B]用戶數(shù)據(jù)段 [C]系統(tǒng)數(shù)據(jù)段 [D] elf段
進程是由 進程控制塊、程序段、數(shù)據(jù)段 三部分組成
18 .以下哪種方法無法查看進程的信息 (C )
[A] ps [B]查看 /proc 目錄 [C] kill [D] top
Linux系統(tǒng)中每一個進程都會有 /proc文件系統(tǒng)下的與之對應的一個目錄 (init進程信息存
放在/proc/1目錄下)。
19 .默認情況下,不會終止進程的信號是 (D )
[A] SIGINT [B] SIGKILL [C] SIGA
8、LRM [D] SIGCHLD
20 . fread()返回值的含義是 (B )
[A]讀取的字節(jié)數(shù) [B]讀取的對象數(shù) [C]緩沖區(qū)的首地址 [D] 0
size_t fread (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í)行某個程序時
9、, 分配和釋放的各種資源
進程是一個程序的 一次執(zhí)行的過程
進程是程序執(zhí)行和資源管理的 最小單位
2 .指出靜態(tài)庫和共享庫的區(qū)別 (使用方法,對程序的影響)(5分)
靜態(tài)庫在程序 編譯時會被連接到目標代碼中 ,程序運行時將不再需要該 靜態(tài)庫,因
此體積較大。
動態(tài)庫在程序編譯時并 不會被連接 到目標代碼中,而是在程序運行是才被載入, 因此
在程序運行時還需要動態(tài)庫存在 ,因此代碼體積較小。
3 .寫出設置信號處理函數(shù)和用戶定義的信號處理函數(shù)的原型 (5分)
void (*signal(int signum, void (*handler)(int)))(int);
type
10、def void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
void driver_handler(int signo);
void(*handler)( int);
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(in
11、tsigno,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 必 0
MGCONT
停止愈
用文件IO
分別實現(xiàn)標準IO中的(r, r+, w, w+, a, a+),文件名由argv[1]傳入程序.
12、
(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 (argv[1],O_RDONLY ;
open (argv[1],O_RDWR);
open(argv[1],O_WRONLY | O_CREAT | O_TRUNC,0666);
open(argv[1],O_RDWR | O_CREAT | O_TRUNC,0666);
open(argv[1]
13、,O_WRONLY | O_CREAT | O_APPEND,0666);
open(argv[1],O_RDWR | O_CREAT | O_APPEND,0666);
4.編寫程序?qū)崿F(xiàn)如下功能(10分):
從argv[1]所指定的文件中讀取內(nèi)容,依次寫到管道
/home/linux/myfifo 中
從管道/home/linux/myfifo 中讀取內(nèi)容,寫到 argv[1]所指定
的文件中并保存
代碼中可省略頭文件,/home/linux/myfifo 無需創(chuàng)建
int main(int argc, const char *argv[]) {
int fd,fd_s
14、rc;
char buf[32];
int bytes;
if(argc < 2)
printf("Usage %s src_file\n",argv[0]); return -1;
}
if((fd = open("/home/linux/myfifo",O_WRONLY )) < 0) {
perror("fail to open");
return -1;
}
if((fd_src = open(argv[1],O_RDONLY)) < 0) {
perror("fail to open");
return -1;
}
while(( bytes = read
15、(fd_src,buf,32) ) > 0)
{
write(fd,buf,bytes);
}
close(fd);
close(fd_src);
return 0;
}
int main(int argc, const char *argv[])
{
int fd,fd_dest;
char buf[32];
int bytes;
if(argc < 2) {
printf("Usage %s dest_file\n",argv[0]);
return -1;
}
if((fd = open("/home/linux/myfifo",O_RDONLY) ) < 0) {
perror("fail to open");
return -1;
}
if((fd_dest = open(argv[1],O_WRONLY | O_CREAT | O_TRUNC,0666)) < 0) {
perror("fail to open"); return -1;
while(( bytes = read(fd,buf,32) ) > 0) {
write(fd_dest,buf, bytes);
}
close(fd);
close(fd_dest);
return 0;
}