c語言進程
㈠ 用c語言編寫的進程管理程序
#include<conio.h>
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>
structPCB_type
{charpid[100];//進程名輸入用字元串健壯性比較好
intpriority;
intcputime;
intstate;
};//缺少「};」
intshumu=0,pid_l;
structPCB_typeneicun[20];
structPCB_typehc[10];
intmax=0;
intnumber=0;
voidcreate();
voidrun();
voidhuanchu();
voidkill();
intmain()
{
intn,a;
n=1;
system("color1d");
while(n==1)
{
system("cls");
printf(" **********************************************");
printf(" *進程演示系統*");
printf(" **********************************************");
printf(" 1.創建新的進程2.查看運行進程");
printf(" 3.換出某個進程4.殺死運行進程");//新增了一個喚醒功能
printf(" 5.退出系統");
printf(" **********************************************");
printf(" 請選擇(1~5):");
scanf("%d",&a);
switch(a)
{case1:
create();
printf(" pressanykeytogoon~");
getch();
break;
case2:
run();
printf(" pressanykeytogoon~");
getch();
break;
case3:
huanchu();
printf(" pressanykeytogoon~");
getch();
break;
case4:
kill();
printf(" pressanykeytogoon~");
getch();
break;
case5:
exit(0);
default:
n=1;
break;
}
}
}
voidcreate()
{
if(shumu>=20)
{
printf(" 內存已滿,請先結束或換出進程 ");
}
else
{
shumu++;
printf(" 請輸入新進程的程序名 ");
scanf("%s",neicun[shumu-1].pid);
printf(" 請輸入新進程的優先順序(數字) ");//
scanf("%d",&neicun[shumu-1].priority);
printf(" 請輸入新進程的需要的運行時間 ");//
scanf("%d",&neicun[shumu-1].cputime);
printf(" 創建進程時令其狀態為就緒 ");
neicun[shumu-1].state=2;//1為等待,2就緒,3為運行
}
printf(" 創建進程成功! ");
}
voidrun()
{
if(shumu<=0)//查看//判斷是否存在進程
{
printf("當前狀態無進程,按任意鍵繼續創建進程 ");
return;
}
intmax=0;
for(inti=0;i<shumu;i++)//
if((neicun[i].state==2&&neicun[i].priority>=neicun[max].priority))
{
max=i;//這里判斷優先順序,優先順序高的進程優先執行。
}
if(neicun[max].state==2)
{
neicun[max].state=3;//進程運行,狀態為3
system("color5F");
printf("/*********************當前已有進程%d個*************************/: ",shumu);
for(inti=0;i<shumu;i++){
printf("進程編號:%d",i+1);
printf(" /***********正在運行進程程序名:%s*************************/ ",neicun[i].pid);
printf(" /***********該進程的優先順序:%d*****************************/ ",neicun[i].priority);
printf(" /***********該進程的需要運行時間:%d***********************/ ",neicun[i].cputime);
printf(" /***********該進程的狀態:%d(1為等待,2就緒,3為運行)******/ ",neicun[i].state);}//這里增加顯示當前運行的進程
}
}
/*換出*/
voidhuanchu()
{
intk;
if(shumu<=0)//判斷是否存在進程
{
printf("當前進程數目為0,不能執行該操作 ");
return;
}
printf("當前已有進程%d個: ",shumu);
for(inth=0;h<shumu;h++)//當前所有的進程
printf("序號:%d 程序名:%s 優先順序:%d 運行時間:%d 狀態:%d "
,h,neicun[h].pid,neicun[h].priority,neicun[h].cputime,neicun[h].state);
printf("請輸入要換出程序的序號:");
scanf("%d",&k);
if(neicun[k].state==3)
{
neicun[k].state=1;
printf("已被換出,進程名為:%s、狀態為:[%d]",neicun[k].pid,neicun[k].state);
}
else
printf("無法換出,進程名為:%s的進程",neicun[k].pid);//換出結果提示
}
voidkill()
{
if(shumu<=0)//對存在的進程進行判斷
{
printf("當前進程數目為0,不能執行該操作 ");
return;
}
intk=0;
printf("/******************當前已有進程%d個******************/: ",shumu);
for(inth=0;h<shumu;h++)//當前所有的進程
printf("序號:%d 程序名:%s 優先順序:%d 運行時間:%d 狀態:%d "
,h,neicun[h].pid,neicun[h].priority,neicun[h].cputime,neicun[h].state);
printf("請輸入要殺死程序的序號:");
scanf("%d",&k);
neicun[k].cputime=0;
neicun[k].priority=0;
neicun[k].state=0;
if(k==(shumu-1))
shumu--;
else{
for(intj=k+1;j<shumu;j++)
{
strcmp(neicun[j-1].pid,neicun[j].pid);
neicun[j-1].priority=neicun[j].priority;
neicun[j-1].cputime=neicun[j].cputime;
neicun[j-1].state=neicun[j].state;
}
shumu--;
}
printf("進程名為:%s已被殺死! ",neicun[k].pid);//顯示進程已被殺死
}
㈡ 如何僅用c語言實現查看系統的進程,和進程名
#include<stdlib.h>
#include<stdio.h>
voidmain()
{
//顯示所有的進程
system("tasklist");
system("pause");
}
顯示正在運行的進程
㈢ 怎麼用C語言寫一個關閉後台某進程的程序
//kill進程from名字
BOOL KillProcessFromName(LPCSTR lpProcessName)
{
//創建進程快照(TH32CS_SNAPPROCESS表示創建所有進程的快照)
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//PROCESSENTRY32進程快照的結構體
PROCESSENTRY32 pe;
//實例化後使用Process32First獲取第一個快照的進程前必做的初始化操作
pe.dwSize = sizeof(PROCESSENTRY32);
//下面的IF效果同:
//if(hProcessSnap == INVALID_HANDLE_VALUE) 無效的句柄
if(!Process32First(hSnapShot,&pe))
{
return FALSE;
}
CString strProcessName = lpProcessName;
//將字元串轉換為小寫
strProcessName.MakeLower();
//如果句柄有效 則一直獲取下一個句柄循環下去
while (Process32Next(hSnapShot,&pe))
{
//pe.szExeFile獲取當前進程的可執行文件名稱
CString scTmp = pe.szExeFile;
//將可執行文件名稱所有英文字母修改為小寫
scTmp.MakeLower();
//比較當前進程的可執行文件名稱和傳遞進來的文件名稱是否相同
//相同的話Compare返回0
if(!scTmp.Compare(strProcessName))
{
//從快照進程中獲取該進程的PID(即任務管理器中的PID)
DWORD dwProcessID = pe.th32ProcessID;
HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessID);
::TerminateProcess(hProcess,0);
CloseHandle(hProcess);
return TRUE;
}
scTmp.ReleaseBuffer();
}
strProcessName.ReleaseBuffer();
return FALSE;
}
以殺死qq程序為例,我們可以通過下列方式:
KillProcessFromName("qq.exe");
㈣ 怎麼用c語言結束某進程
首先你要知道該進程的PID
如果在windows下可以用tskill PID命令來實現,如果是c語言,只需要用system函數就可以實現
#include"stdio.h"
#include"stdlib.h"
intmain()
{
system("tskillXXXX");
return0;
}
其中XXXX就是你需要傳入的進程的PID
如果是linux或者unix的系統
則用kill命令:
#include"stdio.h"
#include"stdlib.h"
intmain()
{
system("killXXXX");
return0;
}
XXX一樣是進程的PID
㈤ c語言進程調度
意思就是你這個cpp中 定義的這些函數都不合法,不符合C++語言的規定。
㈥ c語言多進程編程
多進程這個詞用得比較少,聽過來有點不熟悉。你這個程序在linux下應該很容易實行,就是個進程間通信的問題,管道、消息隊列、共享內存都可以,可以找找相關資料。昨天失言不好意思。
三個源文件分別為1.c、2.c、3.c一個頭文件share.h。
share.h:
//共享的內存,兩個數組
typedef struct{
int a[2];
int b[2];
int id;
}share_use;
1.c:
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include"share.h"
int main(){
void *shared_memory = (void *)0;
share_use *share_stuff;
int shmid;
shmid=shmget((key_t)1234,sizeof(share_use),0666|IPC_CREAT);//創建共享內存
if(shmid==-1){
fprintf(stderr,"共享內存創建失敗!\n");
exit(1);
}
shared_memory = shmat(shmid, (void *)0,0);//讓進程可以訪問共享內存
if(shared_memory == (void *)-1){
fprintf(stderr,"啟用共享內存失敗!\n)";
exit(1);
}
printf("Memory attached at %X\n",(int)shared_memory);
share_stuff = (share_use *)shared_memory;
share_stuff->id=0;
share_stuff->a[0]=1;
share_stuff->a[1]=2;
while(1){
if(share_stuff->id)
exit(0);
sleep(10);
}
}
2.c:
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include"share.h"
int main(){
void *shared_memory = (void *)0;
share_use *share_stuff;
int shmid;
shmid=shmget((key_t)1234,sizeof(share_use),0666|IPC_CREAT);//創建共享內存
if(shmid==-1){
fprintf(stderr,"共享內存創建失敗!\n");
exit(1);
}
shared_memory = shmat(shmid, (void *)0,0);//讓進程可以訪問共享內存
if(shared_memory == (void *)-1){
fprintf(stderr,"啟用共享內存失敗!\n");
exit(1);
}
printf("Memory attached at %X\n",(int)shared_memory);
share_stuff = (share_use *)shared_memory;
share_stuff->b[0]=share_stuff->a[0]*100;
share_stuff->b[1]=share_stuff->a[1]*100;
while(1)
{
if(share_stuff->id)
exit(0);
sleep(10);
}
}
3.c:
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include"share.h"
int main(){
void *shared_memory = (void *)0;
share_use *share_stuff;
int shmid;
shmid=shmget((key_t)1234,sizeof(share_use),0666|IPC_CREAT);//創建共享內存
if(shmid==-1){
fprintf(stderr,"共享內存創建失敗!\n");
exit(1);
}
shared_memory = shmat(shmid, (void *)0,0);//讓進程可以訪問共享內存
if(shared_memory == (void *)-1){
fprintf(stderr,"啟用共享內存失敗!\n");
exit(1);
}
printf("Memory attached at %X\n",(int)shared_memory);
share_stuff = (share_use *)shared_memory;
printf("共享內存中有元素:%d , %d",share_stuff->b[0],share_stuff->b[1]);
share_stuff->id=1;
return 0;
}
linux或unix環境下編譯
㈦ c語言里什麼叫進程
對於代碼來說, 進程就是當前程序運行的載體。 也就是程序本身。
進程結束, 程序也就退出了。
所以 中止進程後, 當前程序所有代碼都不會執行。
㈧ 用C語言編寫有關進程的程序
你是要模擬還是要怎麼地?、
㈨ C語言函數的進程函數
所在函數庫為stdlib.h、process.h
void abort() 此函數通過調用具有出口代碼3的_exit寫一個終止信息於
stderr,並異常終止程序 無返回值
int exec…裝入和運行其它程序
int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)
int execle( char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int execlp( char *pathname,char *arg0,char *arg1,…,NULL)
int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])
int execv( char *pathname,char *argv[])
int execve( char *pathname,char *argv[],char *envp[])
int execvp( char *pathname,char *argv[])
int execvpe(char *pathname,char *argv[],char *envp[])
exec函數族裝入並運行程序pathname,並將參數
arg0(arg1,arg2,argv[],envp[])傳遞給子程序,出錯返回-1
在exec函數族中,後綴l、v、p、e添加到exec後,
所指定的函數將具有某種操作能力
有後綴 p時,函數可以利用DOS的PATH變數查找子程序文件
l時,函數中被傳遞的參數個數固定
v時,函數中被傳遞的參數個數不固定
e時,函數傳遞指定參數envp,允許改變子進程的環境,
無後綴e時,子進程使用當前程序的環境
void _exit(int status)終止當前程序,但不清理現場
void exit(int status) 終止當前程序,關閉所有文件,寫緩沖區的輸出(等待輸出),
並調用任何寄存器的出口函數,無返回值
int spawn…運行子程序
int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnv( int mode,char *pathname,char *argv[])
int spawnve( int mode,char *pathname,char *argv[],char *envp[])
int spawnvp( int mode,char *pathname,char *argv[])
int spawnvpe(int mode,char *pathname,char *argv[],char *envp[])
spawn函數族在mode模式下運行子程序pathname,並將參數
arg0(arg1,arg2,argv[],envp[])傳遞給子程序.出錯返回-1
mode為運行模式
mode為 P_WAIT 表示在子程序運行完後返回本程序
P_NOWAIT 表示在子程序運行時同時運行本程序(不可用)
P_OVERLAY表示在本程序退出後運行子程序
在spawn函數族中,後綴l、v、p、e添加到spawn後,
所指定的函數將具有某種操作能力
有後綴 p時, 函數利用DOS的PATH查找子程序文件
l時, 函數傳遞的參數個數固定.
v時, 函數傳遞的參數個數不固定.
e時, 指定參數envp可以傳遞給子程序,允許改變子程序運行環境.
當無後綴e時,子程序使用本程序的環境.
int system(char *command) 將MSDOS命令command傳遞給DOS執行
轉換子程序,函數庫為math.h、stdlib.h、ctype.h、float.h
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *gcvt(double value,int ndigit,char *buf)
將數value轉換成字元串並存於buf中,並返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無符號整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *ltoa(long value,char *string,int radix)
將長整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *itoa(int value,char *string,int radix)
將整數value轉換成字元串存入string,radix為轉換時所用基數
double atof(char *nptr) 將字元串nptr轉換成雙精度數,並返回這個數,錯誤返回0
int atoi(char *nptr) 將字元串nptr轉換成整型數, 並返回這個數,錯誤返回0
long atol(char *nptr) 將字元串nptr轉換成長整型數,並返回這個數,錯誤返回0
double strtod(char *str,char **endptr)將字元串str轉換成雙精度數,並返回這個數,
long strtol(char *str,char **endptr,int base)將字元串str轉換成長整型數,
並返回這個數,
int toascii(int c) 返回c相應的ASCII
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應的小寫字母('a'-'z')
int _tolower(int ch) 返回ch相應的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應的大寫字母('A'-'Z')
int _toupper(int ch) 返回ch相應的大寫字母('A'-'Z')
㈩ C語言創建進程
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
intmain()
{
for(intj=0;j<5;++j){
intpid=fork();
if(pid==0){//child
printf("j:%d,pid:%d. ",j,getpid());
exit(0);
}elseif(pid<0){//error
exit(-1);
}
}
for(inti=0;i<5;++i){
wait(NULL);
}
printf("End! ");
return0;
}