《進(jìn)程測試題含答案》由會(huì)員分享,可在線閱讀,更多相關(guān)《進(jìn)程測試題含答案(6頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、一、選擇題 (每題 2 分,共 40 分)
1. 下列哪種打開文件的方式不能修改文件已有的內(nèi)容 ( B )
[A] r+ [B] r [C] w+ [D] a+
2. 以下哪種不是進(jìn)程的狀態(tài) ( B )
[A] 運(yùn)行態(tài) [B] 鎖定態(tài) [C] 睡眠態(tài)
[D] 停止態(tài)
3. 以讀寫方式打開一個(gè)已存在的標(biāo)準(zhǔn)
I/O 流時(shí)應(yīng)指定哪個(gè)
mode 參數(shù) ( B )
[A] r
[B] r+ [C] w+ [D] a+
4. fork()的返回值不可能是(C)
[C] 1 [D] 大于 10000 的正整數(shù)
[A] -1 [B] 0
5. 常用來進(jìn)行多任務(wù)同步的機(jī)制
2、是 ( B )
[A] 管道 [B] 信號(hào)量 [C] 信號(hào) (異步通信方式, 中斷機(jī)制的模擬) [D]
共享內(nèi)存 (本身不提供同步機(jī)制,可自行添加信號(hào)量 實(shí)現(xiàn)同步 )
信號(hào)量:解決進(jìn)程 線程之間的同步與互斥問題的一種通信機(jī)制: 信號(hào)量變量 和這個(gè)變量
等待隊(duì)列 、 兩個(gè)原子操作( PV) .
6. 下列哪個(gè)函數(shù)無法傳遞進(jìn)程結(jié)束時(shí)的狀態(tài)
[A]close [B] exit
void exit( int status)
7. 以下哪種用法可以等待接收進(jìn)程號(hào)為
[A] waitpid(pid, &status, 0)
[C] waitpid(-1, &status, 0)
(
3、A )
[C] _exit
[D] return
pid 的子進(jìn)程的退出狀態(tài) ( A ) P59
[B] waitpid(pid, &status, WNOHANG) [D] waitpid(-1, &status, WNOHANG)
0。
WNOHANG:子進(jìn)程沒結(jié)束,不阻塞立即返回,返回值為 0:阻塞父進(jìn)程,直到子進(jìn)程退出。
8 . What kind of IPC has the highest efficiency ( B)
[A] semaphore
[B] sharedmemory
[C] fifo
[D] message queue
E signal
4、
9 . 下列對(duì)無名管道描述錯(cuò)誤的是 ( C )
[A] 半雙工的通信模式
[B] 有固定的讀端和寫端
[C] 可以使用 lseek 函數(shù)
[D] 只存在于內(nèi)存中
10 .下列對(duì)于有名管道描述錯(cuò)誤的是 ( D )
[A] 可以用于互不相關(guān)的進(jìn)程間
[B] 通過路徑名來打開有名管道
[C]在文件系統(tǒng)中可見
[D]管道內(nèi)容保存在磁盤上
11 .下列不屬于用戶進(jìn)程對(duì)信號(hào)的響應(yīng)方式的是 (B )
[A]忽略信號(hào) [B]保存信號(hào) [C]捕捉信號(hào) [D]按缺省方式處理(1
終止 SIGINT Ctrl+c, SIGINTQUIT 。 2 暫停 SIGSTOP 3 停止 SIGTST
5、PCtrl+z.。4 忽略 SIGCHILD
12 .不能被用戶進(jìn)程屏蔽的信號(hào)是 (B )
[A] SIGINT [B] SIGSTOPSIGKILL [C] SIGQUIT [D] SIGILL 非法指
令時(shí)發(fā)出
13 .下列哪個(gè)是不帶緩存的(C )
[A] stdin [B] stdout [C] stderr [D] 都不是
14 .下列不屬于IPC對(duì)象白^是(A )
[A]管道 [B]共享內(nèi)存 [C]消息隊(duì)列 [D]信號(hào)燈
IPC對(duì)象通過它的標(biāo)識(shí)符來引用和訪問,這個(gè)標(biāo)識(shí)符是一個(gè)非負(fù)整數(shù),它唯一的標(biāo)識(shí)了一個(gè)
IPC對(duì)象,這個(gè)IPC對(duì)象可以是消息隊(duì)列或信號(hào)量或共享存儲(chǔ)器中
6、的任意一種類型
15 .如果鍵盤輸入為abcdef,程序如下所示,打印結(jié)果應(yīng)該是 (A )
char buffer[6];
fgets(buffer, 6, stdin); printf( %s, buffer);
[A] abcde [B] abcdef [C] abcdef 后出現(xiàn)亂碼 [D] 段錯(cuò)誤
16 .用open()創(chuàng)建新文件時(shí),若該文件存在則可以返回錯(cuò)誤信息的參數(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 .下列不是用戶進(jìn)程白組成部分的是 (D )
[A]正文段 [B]用戶數(shù)據(jù)段 [C]系統(tǒng)數(shù)據(jù)段 [D] elf段
進(jìn)程是由 進(jìn)程控制塊、程序段、數(shù)據(jù)段 三部分組成
18 .以下哪種方法無法查看進(jìn)程的信息 (C )
[A] ps [B]查看 /proc 目錄 [C] kill [D] top
Linux系統(tǒng)中每一個(gè)進(jìn)程都會(huì)有 /proc文件系統(tǒng)下的與之對(duì)應(yīng)的一個(gè)目錄 (init進(jìn)程信息存
放在/proc/1目錄下)。
19 .默認(rèn)情況下,不會(huì)終止進(jìn)程的信號(hào)是 (D )
[A] SIGINT [B] SIGKILL [C] SIGA
8、LRM [D] SIGCHLD
20 . fread()返回值的含義是 (B )
[A]讀取的字節(jié)數(shù) [B]讀取的對(duì)象數(shù) [C]緩沖區(qū)的首地址 [D] 0
size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);
二、簡答題(30分)
1 .請(qǐng)描述進(jìn)程和程序的區(qū)別(5分)
進(jìn)程和程序的區(qū)別
程序是靜態(tài)的,它是一些保存在 磁盤上的指令的有序集合, 沒有任何執(zhí)行的概念
進(jìn)程是一個(gè)動(dòng)態(tài)的概念,它是程序執(zhí)行的過程,包括創(chuàng)建、調(diào)度和消亡
進(jìn)程是一個(gè)獨(dú)立的可調(diào)度的任務(wù)
進(jìn)程是一個(gè)抽象實(shí)體。當(dāng)系統(tǒng)在執(zhí)行某個(gè)程序時(shí)
9、, 分配和釋放的各種資源
進(jìn)程是一個(gè)程序的 一次執(zhí)行的過程
進(jìn)程是程序執(zhí)行和資源管理的 最小單位
2 .指出靜態(tài)庫和共享庫的區(qū)別 (使用方法,對(duì)程序的影響)(5分)
靜態(tài)庫在程序 編譯時(shí)會(huì)被連接到目標(biāo)代碼中 ,程序運(yùn)行時(shí)將不再需要該 靜態(tài)庫,因
此體積較大。
動(dòng)態(tài)庫在程序編譯時(shí)并 不會(huì)被連接 到目標(biāo)代碼中,而是在程序運(yùn)行是才被載入, 因此
在程序運(yùn)行時(shí)還需要?jiǎng)討B(tài)庫存在 ,因此代碼體積較小。
3 .寫出設(shè)置信號(hào)處理函數(shù)和用戶定義的信號(hào)處理函數(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, 一個(gè)指向函數(shù)的指針,該函數(shù)有一個(gè) int參數(shù),返回void。
T*signal(intsigno,P), P=void(*handler)( int);
signal, 一個(gè)函數(shù),該函數(shù)有 2個(gè)參數(shù)(signo,P),返回類型T的指針。
void(T)(int), T=signal(in
11、tsigno,P)
T, 一個(gè)函數(shù),該函數(shù)有一個(gè) int參數(shù),返回void。
4.程序代碼如下,請(qǐng)按執(zhí)行順序?qū)懗鲚敵鼋Y(jié)果 (10分)
int main()
{ pid_t pid1,pid2;
0)
if((pid1=fork())
進(jìn)程狀態(tài)圖
*運(yùn)行態(tài)
■
schedule(l
時(shí)間片到
擁有CPU
$1理edu炊口 iptil 必 0
MGCONT
停止愈
用文件IO
分別實(shí)現(xiàn)標(biāo)準(zhǔ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;
}