linux操作系統實驗
⑴ 操作系統管理linux 系統進程實驗報告
什麼是進程
比如:windows上安裝的QQ,我們會將其稱為QQ程序,那麼當QQ運行之後,在任務管理器中,我們可以看到QQ程序在運行著,此時,我們稱其為:QQ進程。
言簡意賅總結:當我們運行一個程序,那麼我們將該程序叫進程
注意:
1.當程序運行為進程後,系統會為該進程分配內存,以及運行的身份和許可權。
2.在進程運行的過程中,伺服器上回有各種狀態來表示當前進程的指標信息。
進程是已啟動的可執行程序的運行實例,進程有以下組成部分:
分配內存, 已分配內存的地址空間
安全屬性, 進程的運行身份和許可權
進程代碼, 運行一個或多個的線程
進程狀態, 進程運行後的多種狀態
靜態程序, 二進制文件, 靜態/bin/ls, /usr/sbin/sshd
動態進程, 程序運行的過程, 有生命周期及運行狀態
進程的運行環境,包括以下幾個部分:
局部和全局變數
當前的調度上下文
分配給進程使用的系統資源,例如文件描述符、網路埠等
給進程分配對應的pid,ppid
程序和進程的區別
1.程序是數據和指令的集合,是一個靜態的概念,比如/bin/ls、/bin/cp等二進制文件,同事程序可以長期存在系統中。
2.進程是一個程序的運行過程,是一個動態概念,進程是存在生命周期概念的,也就是說進程會隨著程序的終止而銷毀,不會永遠在系統中存在。
進程的生命周期
程序運行時進程的狀態關系:
1.當父進程接收到任務調度時,會通過fork派生子進程來處理,那麼子進程會集成父進程的衣缽。
2.子進程在處理任務代碼時,父進程會進入等待的狀態...
3.如果子進程在處理任務過程中,父進程退出了,子進程沒有退出,那麼這些子進程就沒有父進程來管理了,就變成了僵屍進程。
4.每個進程都會有自己的PID號,(process id)子進程則PPID
⑵ 操作系統進程實驗linux下C實現 POSIX 下進程式控制制的實驗程序 下面有不完整的代碼,求補充 實在沒法兒了..
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
//#include <ctype.h>
#define MAX_CHILD_NUMBER 10;
int proc_number=0;
void do_sth();
int main(int argc, char* argv[]){
int child_proc_number=MAX_CHILD_NUMBER;
int i, id;
pid_t child_pid;
pid_t pid[10]={0};
// if(argc>1){
// child_proc_number=atoi(argv[1]);
// child_proc_number=(child_proc_number>10)?10:child_proc_number;
// }
//創建進程
for (i=0; i<child_proc_number; i++){
if( (child_pid=fork())==0 ){
proc_number=i;
do_sth();
}else{
pid[i]=child_pid;
}
}
//KILL PROC
if(child_pid!=0){
printf("the pid you want to kill(q to quit): ");
while(scanf("%d",&id)){
if (id==113)
break;
else
kill(id,SIGKILL);
}
}
//KILL ALL
kill(0,SIGKILL);
return 0;
}
void do_sth(){
for(;;){
printf("this it process No.%d and its pid is %d.\n",proc_number,getpid());
sleep(2);//主動阻塞兩秒鍾
}
}
⑶ linux操作系統的實驗怎麼做
你這相當於叫人寫個shell...
具體實現思路應該有兩種
A.用system函數調dos命令來實現,這其實是取巧了。
B.完全自己真正寫個命令解釋程序。這可以分成三步來實現
第一步
要自己設計一個內部命令表,按你的要求,採用模塊化的方法,這個表就用結構體來做
struct cmd_table{
char * cmd_name ; //內部命令名字元串
void ( * cmd_func) (void) ;//指向對應於內部命令函數的指針
}
commands [ ] = {
" DIR" ,dir ,
" COP" ,cop ,
" ERA" ,era ,
" DIS" ,dis ,
"END",end,
} ;
//要達到真正的面向對象模塊化編程, 可以再定義個維數宏,來讓搜索內部命令表時能確切
知道內部命令表中內部命令的數目。
# define dim ( x)(sizeof(x)/sizeof (x [0]))
第二步
獲取鍵盤命令
void get cmdln (char * cmd_buffer)
{
show_prompt() ; /*顯示命令提示符*/
get_cmd (cmd_b uffer) ; /*獲取鍵盤命令行並進行大小寫*/
take_para (cmd_buffer) ; /*分離出命令名及參數*/
}
呵呵,抱歉,我要趕飛機去了,下面的我以後在寫。。。。。
預祝國慶節快樂!!!!
⑷ 求解關於linux操作系統的代碼怎麼寫 網路管理實驗 1.新建一個文件test.c 查看其許可權
touch test.c
ls -l test.c
chmod 444 test.c
vi test.c
#include<stdio.h>
main()
{
printf("HelloWorld! ");
}cc -o test test.c
ls -l
chmod 666 test
./test
chmod +x test
./test
chmod 742 test.c
vi /etc/sysconfig/network-scripts/ifcfg-eth0
自己配吧
找個地址ping就是了
⑸ Linux進程通信實驗報告
一、實驗目的:
進一步認識並發(並行)執行的概念,區別順序執行和並發(並行)執行。
分析進程爭用臨界資源的現象,學習解決進程排斥的方法。
二、實驗環境:
一台至少具有256MB內存的計算機,並安裝Red Hat Linux 9的Linux操作系統。
三、實驗內容:
1. 預備知識
fork函數調用:創建一個新進程。
getpid函數調用:獲得一個進程的pid。
lockf系統的調用:在進程同步控制中為進程加鎖。
2. 編寫一段程序(程序名為fork1.c),使用系統調用fork()創建兩個子進程。當此程序運行時,在系統中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字元:父進程顯示字元「a」,子進程分別顯示字元「b」和字元「c」。試觀察記錄屏幕上的顯示結果,並分析原因。
(1)進入Linux操作系統。
(2)打開終端。進入vi編譯器。
(3)輸入源程序代碼。
(4)按Esc鍵,進入命令模式後,輸入「: wq文件名」就可以運行該程序了。
⑹ 小弟有一個Linux操作系統課程留的實驗:寫一個mygetcwd()函數,要求顯示當前工作目錄,不
相關函數:get_current_dir_name, getwd, chdir
頭文件:#include <unistd.h>
定義函數:char * getcwd(char * buf, size_t size);
函數說明:getcwd()會將當前的工作目錄絕對路徑復制到參數buf 所指的內存空間,參數size 為buf 的空間大小。
註:
1、在調用此函數時,buf 所指的內存空間要足夠大。若工作目錄絕對路徑的字元串長度超過參數size 大小,則返回NULL,errno 的值則為ERANGE。
2、倘若參數buf 為NULL,getcwd()會依參數size 的大小自動配置內存(使用malloc()),如果參數size 也為0,則getcwd()會依工作目錄絕對路徑的字元串程度來決定所配置的內存大小,進程可以在使用完次字元串後利用free()來釋放此空間。
返回值:執行成功則將結果復制到參數buf 所指的內存空間, 或是返回自動配置的字元串指針. 失敗返回NULL,錯誤代碼存於errno.
範例
#include <unistd.h>
main()
{
char buf[80];
getcwd(buf, sizeof(buf));
printf("current working directory : %s\n", buf);
}
執行:
current working directory :/tmp
⑺ Linux 操作系統的啟動與初始化實驗中gdb 輸入c後停在continuing 不往下運行是怎麼
你是否調用了阻塞的socket函數?比如recv,沒有收到數據之前,線程是不會從該函數中返回的,也就是被阻塞了
⑻ linux操作系統的實驗問題……求具體應該輸入的命令,用普通的命令就行只是菜鳥的提問沒有什麼深意的
1.echo $PS1
2.PS1='Linux->'
3.PS1='\h'\$
4.PS1='\h \# '\$
5.PS1=:/\w
6修改用戶根目錄下的.bashrc
⑼ 操作系統實驗為什麼要在linux中進行而不在windos中進行編程
因為linux是開源軟體,可以自由使用
而windows 是商業軟體,有版權保護,不充允許進行實驗研究
⑽ Unix/Solaris/Linux操作系統 上機實驗 很簡單的命令~ 求助
1.
ln name name.ln1
ln name name.ln2
肯定受影響!
2.
ls -l name*
rm name
沒有!
3. cd /
ln -dfs /usr/bin bin.link
ls -l bin.link
ls -ld /usr/bin
ls -l /usr
cd home
find mode
ls -l mode
4. cd /
mkdir wj
cd wj
cp /home/mode ./mode.cp
ls -l mode.cp
5. chmod -c -w mode.cp
文件不可讀
chmod -c -rw mode.cp
文件可讀寫,組用戶可讀寫
8.
肯定不行,沒許可權!
9。有root許可權就行
10。不行
沒寫的就依葫蘆畫瓢!