shell下,進程的前台與后台運行


跟系統任務相關的幾個命令:fg、bg、jobs、&、ctrl+z
1. & 最經常被用到
   這個用在一個命令的最后,可以把這個命令放到后台執行
2. ctrl + z
     可以將一個正在前台執行的命令放到后台,並且暫停
3. jobs
     查看當前有多少在后台運行的命令
4. fg
     將后台中的命令調至前台繼續運行
如果后台中有多個命令,可以用 fg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后台正在執行的命令的序號(不是pid)

5. bg 將一個在后台暫停的命令,變成繼續執行

如果后台中有多個命令,可以用bg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后台正在執行的命令的序號(不是pid)
1. jobs列舉出后台作業信息。([作業號]   運行狀態   作業名稱)
2. ctrl+z 將任務放到后台去,並暫停;
3. bg <%int> 將后台任務喚醒,在后台運行;
4. fg   <%int> 將后任務的程序放到前台;


1. ctrl+z 將任務放到后台去,並暫停.
     主進程waitpid(pid,&status,WUNTRACED)時,子進程
     退出時,父進程被喚醒

2. 將后台任務喚醒,在后台運行;
     kill(pid,SIGCONT);  

3. 將后台運行的程序放到前台;
     kill(pid,SIGCONT);  
     waitpid(pid,&status,WUNTRACED);

void fg(char *p)
{
    int pid=0;
    if(p!=NULL)
    {
         pid=atol(p);
        kill(pid,SIGSTOP);
        kill(pid,SIGCONT);
         waitpid(pid,NULL,NULL);
         pid_jobs[jobs_num--]=0;
    }
    else
    printf("error \n");
    return 0;
}    

void bg(char *p)  
{
    int pid=0;
    if(p!=NULL)
    {
     pid=atol(p);
    kill(pid,SIGCONT);
     pid_jobs[jobs_num--]=0;
    }
    else
    printf("error \n");
    return 0;
}    
//可見,后台運行與前台運行的區別只在於前台運行等待子進程的退出而阻塞父進程操作。而后台運行時,可以在父進程中輸入命令繼續其他操作。本質上沒有區別,都是給子進程發送SIGCONT信號。

http://blog.chinaunix.net/u3/94039/showart_1893558.html

---------------------------

1. 解釋程序前台運行與后台運行的區別?

答:前台程序與用戶直接對話;后台程序則間接地為前台程序提供支持,一般來說是為前台程序提供所需要的資源。后台程序既可以直接與前台程序進行對話,也可以使用中間程序作為媒介。通常把用戶正在操作的程序稱為前台程序,而用戶沒有操作但也在運行的程序(如系統服務)稱為后台程序.

命令解釋程序創建一個后台進程時,它在發出此進程命令后,

並在接收其他命令之前,不用等待這個進程結束。

例如:

$ddd &

 

而前台就要等待,直到進程結束為止。

例如:

$ddd

Ctrl-C就結束ddd。

前台程序和終端關聯,后台程序不受終端控制。

 

廣義上說,前台程序/后台程序並不是一個很明確的概念。如果是C/S結構,通常把客戶端的程序看做前台程序,而服務器端程序看做后台程序。現在的操作系統都是多任務的操作系統,可以同時執行多個程序。前台程序就是你當前正在使用的程序,后台程序就是你開啟了以后沒有使用但仍在運行的程序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM