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

📄 jobs.c

📁 Linux下实现shell的部分功能
💻 C
字号:
#include "ysh.h"
#include "extern.h"

void jobs_cmd()
{
	NODE *p;
	int i=1;
	p=head;
	/*遍历链表,显示相关内容*/
	if (head!=NULL) { /*链表不为空*/
		do {
			printf("%d  %d  %s\t%s\n",i,p->pid,p->state,p->cmd);
			i++;
			p=p->link;
		}while (p!=NULL);
	}
	else
		printf("No jobs!\n"); /*链表为空*/
}

void add_node(char *input_cmd,int node_pid)
{
	NODE *p;
	p=(NODE *) malloc(sizeof(NODE)); /*申请新节点*/
	p->pid=node_pid; /*设置节点信息*/
	strcpy(p->cmd,input_cmd); /*保存命令信息*/
	strcpy(p->state,"running"); /*设置工作状态*/
	p->link=NULL;
	if (head==NULL) { /*若链表为空*/
		head=p;
		end=p;
	}else { /*链表不为空*/
		end->link=p; /*将链表尾节点指针指向新节点*/
		end=p; /*将end指向链表尾*/
	}
}

void del_node(int sig,siginfo_t *sip) /*删除节点*/
{	
	NODE *q,*p;
	int id;
	/*当按下ctrl-z时,也会收到SIGCHLD信号,这种情况不删除节点*/
	if (sig_z==1) {
		sig_z=0;goto out;
	}
	id=sip->si_pid; /*获得发送SIGCHLD信号的进程的进程号*/
	p=q=head;
	if (head==NULL)
		goto out; /*链表为空*/
	/*遍历链表找到相应节点*/
	while (p->pid!=id&&p->link!=NULL) /*找到要删除的节点p*/
		p=p->link;
	if (p->pid!=id) {
		goto out;
	}
	if (p==head) { /*p为头节点*/
		head=head->link;
	}else {
		while(q->link!=p) /*找到p的前驱节点q*/
		q=q->link;
		if (p==end) { /*p为尾节点*/
			end=q;
			q->link=NULL;
		}
		else
			q->link=p->link;
	}
	free(p);
	out: return;
}

void setflag()
{	
	sig_flag=1;
}

⌨️ 快捷键说明

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