⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 POSIX下进程控制的实验程序(操作系统实验程序)
💻 C
字号:
/*
 * POSIX下进程控制的实验程序残缺版 1.2
 * 作者:Sunner Sun
 * 最后修改时间:2005-3-10 23:59
 */

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <ctype.h>

/* 允许建立的子进程个数最大值 */
#define MAX_CHILD_NUMBER	10

/* 子进程睡眠时间 */
#define SLEEP_INTERVAL		2

int proc_number=0;  /* 子进程的自编号,从0开始 */
void do_something();

int main(int argc, char* argv[])
{
	int child_proc_number = MAX_CHILD_NUMBER;	/* 子进程个数 */
	int i, ch;
	pid_t child_pid;
	pid_t pid[10]={0};	/* 存放每个子进程的id */

	if (argc > 1)
	{
		/* 命令行参数中的第一个参数表示建立几个子进程,最多10个 */
		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_something();
	    }
	    else
	    {
	        pid[i]=child_pid;
	    }
		/* 在这里填写代码,建立child_proc_number个子进程
		 * 子进程要执行
		 *	proc_number = i;
		 *	do_something();
		 * 父进程把子进程的id保存到pid[i] */
	}

	/* 让用户选择杀死哪个进程。输入数字(自编号)表示杀死该进程
	 * 输入q退出 */
	while ((ch = getchar()) != 'q')
	{
		if (isdigit(ch))
		{
		    kill(pid[ch-'0'],SIGTERM);
			/* 在这里填写代码,向pid[ch-'0']发信号SIGTERM,
			 * 杀死该子进程 */
		}
	}
    kill(0,SIGKILL);

	    return 0;
}

void do_something()
{
	for(;;)
	{
		/* 打印子进程自编号。为清晰,在每个号码前加“号码+3”个空格
		 * 比如号码是1,就打印"    1" */
		printf("This is process No.%*d\n",
				  proc_number+3,
				  proc_number);
		sleep(2); /* 主动阻塞两秒钟 */
	}
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -