📄 jobs.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 + -