BUPT復試專題—進程管理
阿新 • • 發佈:2018-03-25
sca 題目 大小 clear style names 同時 狀態 小寫
1. FORK PID1 PID2:標識為PlD1的進程啟動了一個標識為PID2的子進程。
2. KILL PID:結朿標識為PID的進程。迠註意,與此冋時所有PID的子進程也將同時結朿。如果PID是不存在或己經結朿的進程,則不做任何操作。
3. QUERY PID:査詢標i只為PID的進程是否仍然存在。
在初始狀態下,系統只開啟了PID為0的進程,並且在任何情況下該進程不會結束。
每組測試數據的第一行足一個整數N (1~100),表示操作的數量。
接下來N行,每行按照上面的描述給出每個操作.輸入保證所有的進程的PID 都不相同,且一個進程結柬後不會被重新啟動。所有PID都足[0,100]之間的整數。
題目描述
在操作系統中,進程管理是非常重要的工作。每個進程都有唯一的進程標識PID。每個進程都可以啟動子進程,此時我們稱該它本身是其子進程的父進程。除PID為0的進程之外,每個進程冇且只冇一個父進程。在這個任務中,你需要實 時維護操作系統運行中的三種基本操作:1. FORK PID1 PID2:標識為PlD1的進程啟動了一個標識為PID2的子進程。
2. KILL PID:結朿標識為PID的進程。迠註意,與此冋時所有PID的子進程也將同時結朿。如果PID是不存在或己經結朿的進程,則不做任何操作。
3. QUERY PID:査詢標i只為PID的進程是否仍然存在。
在初始狀態下,系統只開啟了PID為0的進程,並且在任何情況下該進程不會結束。
輸入
輸入的第一行足一個整數T(<=50),表示輸入的數據組數。每組測試數據的第一行足一個整數N (1~100),表示操作的數量。
接下來N行,每行按照上面的描述給出每個操作.輸入保證所有的進程的PID 都不相同,且一個進程結柬後不會被重新啟動。所有PID都足[0,100]之間的整數。
輸出
對於每個QUERY,如果查詢的進程仍然存在則輸出Yes,否則輸出No。輸出的大小寫必須和樣例一致。樣例輸入
2
5
FORK 0 1
QUERY 1
KILL 1
QUERY 1
QUERY 2
1
QUERY 0
樣例輸出
Yes No No No Yes
來源
2014網研C題
#include<algorithm> #include<iostream> #include<cstdio> #include<map> #include<vector> using namespace std; struct tree { vector<int> i; int lable; }; map<int,tree> donser; void deal(int m) { donser[m].lable=0; vector<int> tep=donser[m].i; vector<int>::iterator it; while(tep.size()) { int a=tep.back(); tep.pop_back(); deal(a); } return; } int main() { int a,b; while(~scanf("%d",&a)) { while(a--) { cin>>b; while(b--) { string temp; cin>>temp; donser[0].lable=1; if(temp[0]==‘F‘) { int m,n; cin>>m>>n; donser[m].i.push_back(n); donser[m].lable=1; donser[n].lable=1; } else if(temp[0]==‘Q‘) { int m; cin>>m; if(donser[m].lable==1) cout<<"Yes"<<endl; else cout<<"No"<<endl; } else if(temp[0]==‘K‘) { int m; cin>>m; deal(m); } } donser.clear(); donser[0].lable=1; } } return 0; }
BUPT復試專題—進程管理