扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Linux手工启动进程
10多年的琼中黎族网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整琼中黎族建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“琼中黎族网站设计”,“琼中黎族网站推广”以来,每个客户项目都认真落实执行。
手工启动进程指的是由用户输入命令直接启动一个进程,根据所启动的进程类型和性质不同,又细分为前台启动和后台启动两种。
前台启动进程
这是手工启动进程最常用的方式,因为当时输入一个命令并运行,就已经启动了一个进程,而且是一个前台的进程,此时系统其实已经处于一个多进程的状态,一个是shell进程,另一个是新启动的进程。
实际上,系统自动时就有许多进程悄悄地在后台运行,不过为了方便阅读,并没有将这些进程包括在内。
假如启动一个比较耗时的进程,然后再把该进程挂起,并使用ps命令查看,就会看到该进程在PS显示列表中。将进程挂起,指的是将前台运行的进程放到后台,并且暂停其运行。
后台启动进程
进程直接从后台运行,用的相对比较少,除非该进程非常耗时,且用户也不急着需要其运行结果的时候,例如,用户需要启动一个需要长时间运行的格式化文本文件的进程,为了不使整个shell在格式化过程中都处于被占用状态,从后台启动这个进程是比较明智的选择。
从后台启动进程,其实就是在命令结尾处添加一个符号。输入命令并运行之后,shell会提供给我们一个数字,此数字就是该进程的进程号。然后直接就会出现提示符,用户就可以继续完成其他工作。
手工启动的2种方式,实际上它们有个共同的特点,就是新进程都是由当前shell这个进程产生的,换句话说,是shell创建了新进程,于是称这种关系为进程间的父子关系,其中shell是父进程,新进程是子进程。
且一个父进程可以有多个子进程,通常子进程结束后才能继续父进程;当然,如果是从后台启动,父进程就不用等待子进程了。
Linux调度启动进程
在Linux系统中,任务可以被配置在指定的时间、日期或者系统平均负载量低于指定值时自动启动。
例如,Linux预配置了重要系统任务的运行,以便可以使系统能够实时被更新,系统管理员也可以使用自动化的任务来定期对重要数据进行备份。
实现调度启动进程的方法有很多,比如通过crontab、cat等命令。
命令运行时使用CTRL+Z,强制当前进程转为后台,并使之挂起(暂停).
1. 使进程恢复运行(后台)
(1)使用命令bg
Example:
zuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv01
*这里使用CTRL+Z,此时serv01是停止状态*
[1]+ Stopped ./tcpserv01
zuii@zuii-desktop:~/unp/tcpcliserv$ bg
[1]+ ./tcpserv01 *此时serv01运行在后台*
zuii@zuii-desktop:~/unp/tcpcliserv$
(2)如果用CTRL+Z停止了几个程序呢?
Example:
zuii@zuii-desktop:~/unp/tcpcliserv$ jobs
[1]- Running ./tcpserv01
[2]+ Stopped ./tcpcli01 127.0.0.1
zuii@zuii-desktop:~/unp/tcpcliserv$ bg %1
bash: bg:任务 1 已转入后台 *后台运行*
2. 使进程恢复至前台运行
Example:
zuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv04
[1]+ Stopped ./tcpserv04
zuii@zuii-desktop:~/unp/tcpcliserv$ fg
./tcpserv04
总结:
(1) CTRL+Z挂起进程并放入后台
(2) jobs 显示当前暂停的进程
(3) bg %N 使第N个任务在后台运行(%前有空格)
(4) fg %N 使第N个任务在前台运行
默认bg,fg不带%N时表示对最后一个进程操作!
启动直接点开机键就可以。
重启reboot 就可以了。
关机,init3、shutdown -f now、halt 都可以关机。
重启服务services 服务 restart。
停止服务services 服务 stop。
开始服务services 服务 start。
服务状态services 服务 status。
扩展资料:
常用命令及技巧:通用命令。
1、date :打印或者设置系统的日期和时间
2、 stty -a:可以查看或者打印控制字符(Ctrl-C、Ctrl-D、 Ctrl-Z等)
3、 passwd:用passwd -h查看
4、logout,login: 登录shell的登录和注销命令
5、 more, less, head tail: 显示或部分显示文件内容
6、 lp/lpstat/cancel, lpr/lpq/lprm: 打印文件
7、 chmod u+x:更改文件权限
8、 rm -fr dir:删除非空目录
9、cp -R dir:拷贝目录
10、 fg jobid :可以将一个后台进程放到前台
参考资料来源:百度百科-linux
这个要看你的linux版本是否支持睡眠和唤醒,一般在关机处都有相应的选项可以进行设置的。
给你一个完整的测试代码:
--------------------------
#include stdio.h
#include sys/types.h
#include unistd.h
#include signal.h
#include stdlib.h
void handler(int signo)
{
printf("recv the signal from parent process\n");
}
int main()
{
pid_t pid;
pid = fork();
switch(pid)
{
case -1:
perror("fork failed");
exit(1);
case 0:
printf("in the child\n");
signal(SIGCONT, handler);
pause();
printf("child weakup\n");
break;
default:
printf("in the parent\n");
sleep(5);
kill(pid, SIGCONT);
sleep(5);
printf("parent weakup\n");
break;
}
printf("bye..\n");
exit(0);
}
--------------------------------------------------
运行及输出:
beyes@linux-beyes:~/C ./weakup.exe
in the child
in the parent
recv the signal from parent process
child weakup
bye..
parent weakup
bye..
....................................
int main(int argc,char *argv[])
{
int fd,i,count =0,nloop=10,zero=0,*ptr;
sem_t mutex;
fd = open("log.txt",O_RDWR | O_CREAT,S_IRWXU);
write(fd,zero,sizeof(int));
ptr = mmap(NULL,sizeof(int),PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
close(fd);
if(sem_init(mutex,1,1) 0)
exit(0);
if(fork()==0)
{
for(i=0;inloop;i++)
{
sem_wait(mutex);
printf("child:%d\n",(*ptr)++);
sem_post(mutex);
}
exit(0);
}
for(i = 0;inloop;i++)
{
sem_wait(mutex);
printf("Parent:%d\n",(*ptr)++);
sem_post(mutex);
}
return 0;
} 参考这个用信号量来做
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流