C语言创建进程

C语言创建进程,第1张

fork()应该是Linux *** 作系统的函数。

从#include <sys/signal.h>和fork()上判断,这个程序应该是Linux *** 作系统的应用程序。

Windows上应该用CreateProcess创建进程

获取进程ID用

DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD lpdwProcessld)

hWnd:窗口句柄。

lpdwProcessld:接收进程标识的32位值的地址。如果这个参数不为NULL,GetWindwThreadProcessld将进程标识拷贝到这个32位值中,否则不拷贝。

返回值:返回值为创建窗口的线程标识。

命名空间,该命名空间提供与系统进程、事件日志、性能计数器的交互。其中与进程相关的两个基本的类是

System.Diagnostics.Process和System.Diagnostics.ProcessStartInfo。1.

System.Diagnostics.Procss

:提供对本地和远程进程的访问并使您能够启动和停止本地系统进程(1)Start方法:启动进程,主要有如下参数设置a.Start(ProcessStartInfo )b.Start(string FileName )c.Start(string FileName, string Arguments )(2)一些属性:a.Id:唯一进程标识号b.

ProcessName:进程名称c.

MachineName

:进程运行所在的计算机名d.StartInfo:进程的StartInfoe.StartTime:启动进程的时间f.ExitTime:退出进程的时间g.HasExited:进程是否已经终止2.

System.Diagnostics.ProcessStartInfo:与Process一起使用,为Process设置启动参数(1)构造方法:a.

ProcessStartInfo()b.

ProcessStartInfo(

string FileName )c.

ProcessStartInfo(

string FileName, string Arguments)(2)一些属性:a.FileName:应用程序或文件名b.Arguments:参数c.

WorkingDirectory

:启动进程的初始目录d.

CreateNoWindow

:是否在新窗口启动进程e.

WindowStyle

:指定打开窗口时的状态(枚举值)f.Verb:打开进程时需要使用的谓词;每个文件扩展名都有它自己的一组谓词;可以使用Verbs属性获取这些谓词。例如,

“print”谓词将打印使用FileName指定的文档。可使用空字符串("")指定默认谓词。

#include <conio.h>

#include <stdio.h>

#include <windows.h>

#include <stdlib.h> 

#include <string.h>               

struct  PCB_type

   {  char pid[100]            //进程名输入用字符串健壮性比较好

      int priority     

      int cputime

   int state

 }                     //缺少“}”

int shumu=0,pid_l      

struct PCB_type neicun[20]

struct PCB_type hc[10]

int max=0

int number=0

void create()

void run()

void huanchu()

void kill()

int main()

{

    int n,a

    n=1

 system("color  1d")

    while(n==1)

    {

      system("cls")

   printf("\n**********************************************")

   printf("\n*               进程演示系统                 *")

   printf("\n**********************************************")

   printf("\n     1.创建新的进程             2.查看运行进程")

   printf("\n     3.换出某个进程             4.杀死运行进程")                    //新增了一个唤醒功能 

   printf("\n     5.退出系统                               ")

   printf("\n**********************************************")

   printf("\n请选择(1~5):")

   scanf("%d",&a)

       switch(a)

      { case 1:

           create( ) 

    printf("\npress any key to go on~")

    getch()

         break

        case 2 :

          run() 

    printf("\npress any key to go on~")

    getch()

          break

        case 3 :

       huanchu()

    printf("\npress any key to go on~")

    getch()

         break

      case 4 :

        kill()

    printf("\npress any key to go on~")

    getch()

         break

      case 5 :

       exit(0)

         default: 

    n=1

       break

    }

       }

}

void create()  

{

       if(shumu>=20)

          {

           printf("\n内存已满,请先结束或换出进程\n")

          }

          else

          {

     shumu++

        printf("\n请输入新进程的程序名\n")

           scanf("%s",neicun[shumu-1].pid)

           printf("\n请输入新进程的优先级(数字)\n")//

           scanf("%d",&neicun[shumu-1].priority)

           printf("\n请输入新进程的需要的运行时间\n")//

           scanf("%d",&neicun[shumu-1].cputime)

     printf("\n创建进程时令其状态为就绪\n")             

     neicun[shumu-1].state=2                               //1为等待,2就绪,3为运行 

 

       }

    printf("\n创建进程成功!\n")

}

void run()

{

 if(shumu<=0)//查看//判断是否存在进程 

 {

  printf("当前状态无进程,按任意键继续创建进程\n")

     return

 }                                                 

 int max=0

 for(int i=0i<shumui++)//             

  if((neicun[i].state==2&&neicun[i].priority>=neicun[max].priority))

  {

   max=i                                                     //这里判断优先级,优先级高的进程优先执行。 

  }

  if(neicun[max].state==2)

  {

   neicun[max].state=3                                //进程运行,状态为3                                                            

   system("color  5F")

   printf("/*********************当前已有进程%d个*************************/:\n",shumu)

   for(int i=0i<shumui++){

   printf("进程编号:%d",i+1)

   printf("\n/***********正在运行进程程序名:%s*************************/\n",neicun[i].pid)

   printf("\n/***********该进程的优先级:%d*****************************/\n",neicun[i].priority)

   printf("\n/***********该进程的需要运行时间:%d***********************/\n",neicun[i].cputime)

   printf("\n/***********该进程的状态:%d(1为等待,2就绪,3为运行)******/\n\n\n",neicun[i].state)      }                 //这里增加显示当前运行的进程 

  }     

 

}

/*            换出            */

void huanchu()

{

 int k

 if(shumu<=0)//判断是否存在进程

 {

  printf("当前进程数目为0,不能执行该 *** 作\n")

     return

 }                                             

 printf("当前已有进程%d个:\n",shumu)

 for(int h=0h<shumuh++)//当前所有的进程  

  printf("序号:%d\t程序名:%s\t优先级:%d\t运行时间:%d\t状态:%d\t\n"

  ,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)    //换出结果提示

}

void kill()

{

 

 if(shumu<=0)//对存在的进程进行判断

 {

  printf("当前进程数目为0,不能执行该 *** 作\n")

     return

 }                                                             

 int k=0

 printf("/******************当前已有进程%d个******************/:\n",shumu)

 for(int h=0h<shumuh++)//当前所有的进程

  printf("序号:%d\t程序名:%s\t优先级:%d\t运行时间:%d\t状态:%d\t\n"

  ,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(int j=k+1j<shumuj++)

    {

     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已被杀死!\n",neicun[k].pid)                                //显示进程已被杀死 

 

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12138634.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存