为您找到与linux将进程切换到前台相关的共200个结果:
1、在字符界面输入startx或init 5 。
2、通过编辑/etc/inittab文件实现默认进入图形界面。
把其中的id:3:initdefault中的3改为5,这样以后系统启动后将直接进入文本模式。
以下是配置引导进入图形模式的etc/inittab文件的部分内容:
#Default runlevel.The runlevels used by RHS are:
# 0-halt(Do NOT set initdefault to this)
# 1 -Single user mode
# 2-Multiuser,without NFS(The same as 3,if you do not have networking)
# 3-Full multiuser mode
# 4-unused
# 5-X11 https://选择此项,系统在登录时将进入图形化登录界面
# 6-reboot(Do NOT set initdefault to this)
#
id:3:initdefault: https://此处若改为3,系统将被引导进入文本登录提示符界
浏览量:2
下载量:0
时间:
进程管理是Linux内核的一种功能。
1.ps命令:process state
SysV风格:每一个选项需要加-
BSD风格:每个选项不需要加-
a:显示所有与终端有关的进程
u:
x:所有与终端无关的进程
-e:显示所有进程
-F:额外完全格式
-l:
2. 进程分类:
跟终端相关的进程
跟终端无关的进程
3.进程状态:
D:不可中断的睡眠
R: 运行或就绪
S: 可中断的睡眠
T: 停止
Z: 僵尸
<:高优先级进程
N:低优先级进程
+:前台进程组进程
l:多线程进程
s:会话进程
4.pstree:显示进程树
5.pgrep:以grep的风格显示进程
6.pidof:显示正在运行的程序的PID
pidof init
pidof sshd
7.top:
M:根据驻留内存大小进行排序
P: 根据CPU使用百分比进行排序
T: 根据累计时间进行排序
l:是否显示平均负载和启动时间
t:是否显示和CPU状态相关信息
m:是否显示内存相关信息
c:是否显示完整的命令行信息
q:推出top
k:终止某个进程
-d:改变刷新延迟时长
-b:以批模式显示
-n #:批模式只显示#批
8.重要的信号:
1:SIGHUP:让一个进程不用重启就可以重读配置文件,并让新的配置信息生效;
2:SIGINT:Ctrl + c,终止
9:SIGKILL:杀死一个进程
15:SIGTERM:终止一个进程(默认信号)
指定一个信号:
信号号码:kill -1
信号名称:kill -SIGKILL
信号名称简写:kill -KILL
9.killall COMMAND:杀死所有名为COMMAND的进程
10.调整nice值:
调整已经启动进程的nice值:
renice NI PID
启动时指定nice值:
nice -n NI COMMAND
11.vmstat:系统状态查看命令
12.前台–>后台:
Ctrl + z
COMMAND &
bg:让后台的停止作业继续运行
jobs:查看后台的所有作业
作业好,不同于进程号
+:命令将默认操作的作业
-:命令将第二个默认操作的作业
fg:将后台作业重新调回前台
fg [[%]jobid],中间的%可以省略,但是如果是使用在kill命令上,则%号不可省略,以为默认的为终止相应的进程,如:
kill 2 表示杀死PID为2的进程,而不是结束作业号为2的作业。
浏览量:1
下载量:0
时间:
对于Linu_系统管理员来说,进程和线程很容易被混淆,只有充分了解了Linu_的进程才不会弄错,下面小编就给大家详细介绍下Linu_的进程吧。
计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存中寻找到某个地址等等。这些最基础的计算机动作被称为指令 (instruction)。所谓的程序(program),就是这样一系列指令的所构成的集合。通过程序,我们可以让计算机完成复杂的操作。程序大多数时候被存储为可执行的文件。这样一个可执行文件就像是一个菜谱,计算机可以按照菜谱作出可口的饭菜。
那么,程序和进程(process)的区别又是什么呢?
进程是程序的一个具体实现。只有食谱没什么用,我们总要按照食谱的指点真正一步步实行,才能做出菜肴。进程是执行程序的过程,类似于按照食谱,真正去做菜的过程。同一个程序可以执行多次,每次都可以在内存中开辟独立的空间来装载,从而产生多个进程。不同的进程还可以拥有各自独立的IO接口。
操作系统的一个重要功能就是为进程提供方便,比如说为进程分配内存空间,管理进程的相关信息等等,就好像是为我们准备好了一个精美的厨房。
看一眼进程
首先,我们可以使用$ps命令来查询正在运行的进程,比如$ps -eo pid,comm,cmd,下图为执行结果:
(-e表示列出全部进程,-o pid,comm,cmd表示我们需要PID,COMMAND,CMD信息)
每一行代表了一个进程。每一行又分为三列。第一列PID(process IDentity)是一个整数,每一个进程都有一个唯一的PID来代表自己的身份,进程也可以根据PID来识别其他的进程。第二列COMMAND是这个进程的简称。第三列CMD是进程所对应的程序以及运行时所带的参数。
(第三列有一些由中括号[]括起来的。它们是kernel的一部分功能,被打扮成进程的样子以方便操作系统管理。我们不必考虑它们。)
我们看第一行,PID为1,名字为init。这个进程是执行/bin/init这一文件(程序)生成的。当Linu_启动的时候,init是系统创建的第一个进程,这一进程会一直存在,直到我们关闭计算机。这一进程有特殊的重要性,我们会不断提到它。
程序,进程,PID,内存空间
子进程,父进程,PPID,fork, wait
上面就是Linu_的进程的相关知识介绍了,通过本文的阅读,相信你对Linu_的进程有了更深入了了解,管理Linu_的进程也更加容易。
浏览量:3
下载量:0
时间:
今天就有读者问读文网小编我了,Linux网络编程怎么使用多进程实现服务器并发访问?然后读文网小编我通过查阅相关资料后,就把相关的解决方法分享到这里吧,以下就是具体内容:
采用多进程的方式实现服务器的并发访问的经典范例。
viidiot@ubuntu$ ./discli 127.0.0.1
hello,world!(客户端输入的内容)
hello,world!(服务器端返回的内容)
浏览量:2
下载量:0
时间:
今天读文网小编就要跟大家讲解下linux 如何结束进程的方法~那么对此感兴趣的网友可以多来了解了解下。下面就是具体内容!!!
先启动一个进程作为测试使用
查看启动的进程
1可以使用以面命令来查看
ps -ef |grep tomcat
2tomcat它是一个Java进程,所以查找Java进程也可查找出来
ps -ef|grep java
3可以看到
用户 和进程编号
可以用kill 进程编号结束进程
结束进程
不所有进程都可以
kill+进程编号结束掉
对于结束不掉的进程可以使用:
kill -s 9 进程编号
强制结束
一般情况下只需要
kill 进程编号就可结束
浏览量:2
下载量:0
时间:
Linux操作系统Fedora图形界面很优秀,使用比较方便,但是对于习惯使用命令界面的朋友来说,在图形界面下工作有点不习惯。对于在Fedora如何在图形界面与命令界面切换的问题,读文网小编在此总结了一些经验。
1在Terminal中进行如下操作
[root@du ~]# ls -l
下图中画线部分可以看到 default.target 是一个链接文件~/runleve5.target,此文件用于配置图形界面的启动脚本。我们需要将其变成~/runleve3.target,即操作系统启动后配置成为命令界面启动脚本。
----------------------------------------------------
[root@du ~]# rm -rf /etc/systemd/system/default.target //删除原有链接
[root@du ~]# ln -s /lib/systemd/system/runleve3.target /etc/systemd/system/default.target //将default.target链接到runleve3.target上
2再次查看
[root@du ~]# ls -l
3重启计算机
[root@du ~]# reboot
4在命令界面下试运行vim效果图
5如果想从命令界面启动图形界面可以使用如下命令:
startx //启动图形界面
END
从命令界面切换到图形界面:
[du@localhost system]$ ls -l
[root@du ~]# rm -rf /etc/systemd/system/default.target //删除原有链接
[root@du ~]# ln -s /lib/systemd/system/runleve5.target /etc/systemd/system/default.target //将default.target链接到runleve5.target上
浏览量:2
下载量:0
时间:
要想对系统进程进行监测和控制,首先必须要了解当前进程的情况,windows操作系统查看当前进程的操作十分简单,调出任务管理器即可,但是linux操作系统并没有这么简便的操作工具,那么在linux操作系统中应该如何查看系统进程呢?
首先我们需要打开终端,本经验以Fedora操作系统为例,其他的操作系统可能略有不同。打开终端之后我们输入ps,它就是我们今天的主角,ps是linux操作系统中最基本同时也是非常强大的进程查看命令,如果你对此命令不是十分了解,我们可以输入ps --help命令来查看此命令的帮助信息。
通过帮助信息我们可以看到,ps命令的相关参数有很多,很多初学的朋友可能会看的一头雾水,不知道该怎么组合这些参数,下面小编就举一些实际应用例子,来介绍一些比较常用的查看进程的固定命令组合。
我们先来看第一个命令,ps -l命令。这个命令和直接使用ps效果类似,但是不同之处在于使用ps命令获得结果很短,而使用-l参数之后将会较长、较详细的列出该PID的的信息列出,由于参数较多,小编就不一一介绍各个参数的含义了,如果想要了解参数的具体含义可以上网查看相关信息。
接着我们来看第二个命令ps aux,有“-”符号和没有两者是有区别的,这个命令应该是比较常用的一个命令,作用就是列出目前所有的正在内存当中的程序,其中a表示显示现行终端机下的所有程序,包括其他用户的程序,u表示以用户为主的格式来显示程序状况,x表示显示所有程序,不以终端机来区分,它的相关参数也不少,例如user,表示属于那个使用者账号的,%CPU表示使用掉的CPU资源百分比,其他的参数小编就不一一的介绍了,有兴趣可以自行查看。
第三个要介绍的命令就是ps -lA命令,跟ps -l命令输出的格式一样,唯一不同的是多了一个A参数,A的作用就是显示出所有进程,因此使用此命令之后输出的结果会非常的多,如果非必要不建议使用此命令。
第四个命令就是ps ajxf,其中a和x表示的意义已经介绍过了,下面我们看下j的意义,j表示采用工作控制的格式显示程序状况,f则表示用ASCII字符显示树状结构,表达程序间的相互关系,输出的结果类似程序树显示。
以上就是linux下查看进程的方法,当然小编介绍的ps命令只是一些基本的参数命令和用法,由于ps能够支持的操作系统很多,因此命令参数也非常庞大,想要弄通弄懂它,需要我们经常使用,勤加练习方能做到。
浏览量:2
下载量:0
时间:
有时候我们在使用LINUX操作系统时,想知道自己的端口被哪个进程占用了。但是不知道如何下手。所以今天读文网小编介绍linux如何查看端口被哪个进程占用的方法,大家一起来看看吧
1、lsof -i:端口号
2、netstat -tunlp|grep 端口号
都可以查看指定端口被哪个进程占用的情况
netstat -tunlp|grep 端口号,用于查看指定端口号的进程情况,如查看22端口的情况,netstat -tunlp|grep 22,如下图
浏览量:4
下载量:0
时间:
下面读文网小编要介绍一下,在linux环境下如何创建进程,如何进行进程控制。欢迎大家来阅读!!!
1、使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。
2、修改已编写好的程序,将每个程序的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现象,并分析其原因。如果在程序中使用系统调用lockf()来给每个程序加锁,可以实现进程之间的互斥,观察并分析出现的现象。
使用系统调用fork( )创建两个子进程,程序示例,如图:
程序结果如图:
使用系统调用lockf()来给每个程序加锁,程序示例如图:
程序运行结果如图:
上锁与未上锁又是结果相同的情况如下,程序代码示例如图:
运行结果如下:
以上就是读文网小编为大家提供的解决方法,希望能帮助到大家!!!最后希望大家生活越来越好。
浏览量:2
下载量:0
时间:
CPU是电脑的重要组成部分,是不可缺少的角色。下面是读文网小编带来的关于关于linux的进程中的各个线程cpu占用情况进行分析和查看的内容,欢迎阅读!
我们经常会在新开的服搭建一个游戏的服务器,有时候要进行压力测试,那么如何来看呢,一般我们会通过top命令查看各个进程的cpu和内存占用情况,获得到了我们的进程id,然后我们也许会通过pstack命令查看里边的各个线程id以及对应的线程现在正在做什么事情,分析多组数据就可以获得哪些线程里有慢操作影响了服务器的性能,从而得到解决方案。比如这样的以组数据:
[root@AY130816144542124256Z bin]# pstack 30222
Thread 9 (Thread 0x7f729adc1700 (LWP 30251)):
#0 0x00007f72a429b720 in sem_wait () from /lib64/libpthread.so.0
#1 0x0000000000ac5eb6 in Semaphore::down() ()
#2 0x0000000000ac5cac in Queue::get() ()
#3 0x00000000009a583f in DBManager::processUpdate(Queue*) ()
#4 0x00000000009a4bfb in dbUpdateThread(void*) ()
#5 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 8 (Thread 0x7f727c579700 (LWP 30252)):
#0 0x00007f72a429b720 in sem_wait () from /lib64/libpthread.so.0
#1 0x0000000000ac5eb6 in Semaphore::down() ()
#2 0x0000000000ac5cac in Queue::get() ()
#3 0x00000000009a5799 in DBManager::processQuery(Queue*) ()
#4 0x00000000009a4c3a in dbQueryThread(void*) ()
#5 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 7 (Thread 0x7f7257fff700 (LWP 30253)):
#0 0x00007f72a42997bb in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f72a549ee08 in utils::thread::condition_impl::timed_wait(int) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#2 0x00007f72a549ebd3 in utils::thread::Condition::timed_wait(int) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#3 0x00000000009d5f57 in utils::MessageQueue::pop() ()
#4 0x00000000009d5557 in FightReport::svc() ()
#5 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#6 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#7 0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 6 (Thread 0x7f72397b7700 (LWP 30254)):
#0 0x00007f72a4588fc3 in poll () from /lib64/libc.so.6
#1 0x00007f72a0fbded4 in __libc_res_nsend () from /lib64/libresolv.so.2
#2 0x00007f72a0fba76a in __libc_res_nquery () from /lib64/libresolv.so.2
#3 0x00007f72a0fbad29 in __libc_res_nquerydomain () from /lib64/libresolv.so.2
#4 0x00007f72a0fbb9cf in __libc_res_nsearch () from /lib64/libresolv.so.2
#5 0x00007f729adc37a7 in _nss_dns_gethostbyname4_r () from /lib64/libnss_dns.so.2
#6 0x00007f72a457a4c3 in gaih_inet () from /lib64/libc.so.6
#7 0x00007f72a457cb20 in getaddrinfo () from /lib64/libc.so.6
#8 0x00007f72a56fc782 in Curl_getaddrinfo_ex () from /usr/lib64/libcurl.so.4
#9 0x00007f72a56f1d42 in Curl_getaddrinfo () from /usr/lib64/libcurl.so.4
#10 0x00007f72a56c9e77 in Curl_resolv () from /usr/lib64/libcurl.so.4
#11 0x00007f72a56ca138 in Curl_resolv_timeout () from /usr/lib64/libcurl.so.4
#12 0x00007f72a56d8d88 in ?? () from /usr/lib64/libcurl.so.4
#13 0x00007f72a56ddb79 in ?? () from /usr/lib64/libcurl.so.4
#14 0x00007f72a56de76e in Curl_connect () from /usr/lib64/libcurl.so.4
#15 0x00007f72a56e69b0 in Curl_perform () from /usr/lib64/libcurl.so.4
#16 0x0000000000ae6e3d in HttpClient::svc() ()
#17 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#18 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#19 0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 5 (Thread 0x7f721af6f700 (LWP 30255)):
#0 0x00007f72a455691d in nanosleep () from /lib64/libc.so.6
#1 0x000000000098cb8a in Sleep(unsigned long) ()
#2 0x000000000098b87d in DynResource::svc() ()
#3 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#4 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#5 0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 4 (Thread 0x7f71fc727700 (LWP 30256)):
#0 0x00007f72a455691d in nanosleep () from /lib64/libc.so.6
#1 0x000000000098cb8a in Sleep(unsigned long) ()
#2 0x0000000000a61516 in PlayerOpLogThread::svc() ()
#3 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#4 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#5 0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 3 (Thread 0x7f71ddedf700 (LWP 30257)):
#0 0x00007f72a4592c73 in epoll_wait () from /lib64/libc.so.6
#1 0x00007f72a51f334f in Epoll_Reactor::run_reactor_event_loop() () from /usr/local/net_manager-0.0.2/lib/libnet_manager.so.0.0.2
#2 0x00007f72a51f2523 in Net_Thread::svc() () from /usr/local/net_manager-0.0.2/lib/libnet_manager.so.0.0.2
#3 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#4 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#5 0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 2 (Thread 0x7f71bf697700 (LWP 30258)):
#0 0x00007f72a4592c73 in epoll_wait () from /lib64/libc.so.6
#1 0x00007f72a51f334f in Epoll_Reactor::run_reactor_event_loop() () from /usr/local/net_manager-0.0.2/lib/libnet_manager.so.0.0.2
#2 0x00007f72a51f2523 in Net_Thread::svc() () from /usr/local/net_manager-0.0.2/lib/libnet_manager.so.0.0.2
#3 0x00007f72a5494b45 in utils::Task_Base::thread_proc(void*) () from /usr/local/utils-0.0.1/lib/libutils.so.0.0.1
#4 0x00007f72a4295851 in start_thread () from /lib64/libpthread.so.0
#5 0x00007f72a459267d in clone () from /lib64/libc.so.6
Thread 1 (Thread 0x7f72a60ae7e0 (LWP 30222)):
#0 0x00007f72a4584c95 in _xstat () from /lib64/libc.so.6
#1 0x00007f72a45483e0 in __tzfile_read () from /lib64/libc.so.6
#2 0x00007f72a4547864 in tzset_internal () from /lib64/libc.so.6
#3 0x00007f72a4547b20 in tzset () from /lib64/libc.so.6
#4 0x00007f72a4546699 in timelocal () from /lib64/libc.so.6
#5 0x0000000000b0b08d in Achieve::GetRemainTime(AchieveTemplate*) ()
#6 0x0000000000b115ca in Achieve::update() ()
#7 0x0000000000a197ce in Player::update() ()
#8 0x0000000000b1b272 in PlayerMng::Tick() ()
#9 0x0000000000a73105 in GameServer::FrameTick(unsigned int) ()
#10 0x0000000000a6ff80 in GameServer::run() ()
#11 0x0000000000a773a1 in main ()
[root@AY130816144542124256Z gameserver]# ps -eLo pid,lwp,pcpu | grep 30222
30222 30222 31.4
30222 30251 0.0
30222 30252 0.0
30222 30253 0.0
30222 30254 0.0
30222 30255 0.0
30222 30256 1.2
30222 30257 1.2
30222 30258 1.0
多组数据显示表明我们的主逻辑线程的确占用的cpu很高,发现其实在Achieve::update() 的时候做了太多没有用的判断,并且可以减少循环进入的次数的,所以我在这里进行了优化
后来用了一下iptraf命令查看了网络流量:
第一项:IP流量监控
第二项:常规查看网卡流量状态。只查看各网卡的总流量
第三项:详细查看网卡流量状态。比如按TCP,UDP,ARP等协议查看
选all interfaces,查看所有网卡接口
界面分上下两部分,上部分可详细显示哪个与之相连的IP,发了多少包,即时流量是多少,下部分,可以显示udp等信息。
显示连接本地服务器的所有连接流量情况
另外不得不提到另外一个命令sar:
sar有很多用途,如果要来监控网络流量,使用下面的命令行方式:
sar -n DEV interval count
其中,interval是统计时间间隔,以秒为单位;count是总共统计几次,如果为0就不断的统计直到 Ctrl+C 打断,否则执行count次就退出。
比如:sar -n DEV 1 4
比如:sar -n DEV 10 0
IFACE:LAN接口
rxpck/s:每秒钟接收的数据包
txpck/s:每秒钟发送的数据包
rxbyt/s:每秒钟接收的字节数
txbyt/s:每秒钟发送的字节数
sar -n DEV -u 1 10
07:22:01 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
07:22:02 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07:22:02 PM eth0 2.47 0.00 0.11 0.00 0.00 0.00 0.00
07:22:02 PM eth1 80.25 22.22 3.53 3.52 0.00 0.00 0.00
07:22:02 PM CPU %user %nice %system %iowait %steal %idle
07:22:03 PM all 1.85 0.00 1.06 0.00 0.00 97.09
07:22:02 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
07:22:03 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07:22:03 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07:22:03 PM eth1 66.67 19.75 2.95 3.22 0.00 0.00 0.00
07:22:03 PM CPU %user %nice %system %iowait %steal %idle
07:22:04 PM all 2.12 0.00 1.06 0.00 0.00 96.82
07:22:03 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
07:22:04 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07:22:04 PM eth0 7.32 4.88 0.65 0.38 0.00 0.00 0.00
07:22:04 PM eth1 85.37 28.05 4.18 3.88 0.00 0.00 0.00
07:22:04 PM CPU %user %nice %system %iowait %steal %idle
07:22:05 PM all 3.96 0.00 2.64 0.00 0.00 93.40
07:22:04 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
07:22:05 PM lo 412.50 412.50 104.44 104.44 0.00 0.00 0.00
07:22:05 PM eth0 13.75 12.50 1.32 1.26 0.00 0.00 0.00
07:22:05 PM eth1 903.75 707.50 174.12 62.42 0.00 0.00 0.00
07:22:05 PM CPU %user %nice %system %iowait %steal %idle
07:22:06 PM all 5.25 0.00 4.46 2.10 0.00 88.19
07:22:05 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
07:22:06 PM lo 849.41 849.41 154.54 154.54 0.00 0.00 0.00
07:22:06 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07:22:06 PM eth1 1287.06 1337.65 84.48 461.76 0.00 0.00 0.00
07:22:06 PM CPU %user %nice %system %iowait %steal %idle
07:22:07 PM all 1.85 0.00 1.06 0.00 0.00 97.09
07:22:06 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
07:22:07 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
07:22:07 PM eth0 4.94 0.00 0.22 0.00 0.00 0.00 0.00
07:22:07 PM eth1 97.53 19.75 4.32 3.18 0.00 0.00 0.00
07:22:07 PM CPU %user %nice %system %iowait %steal %idle
07:22:08 PM all 1.58 0.00 1.32 0.00 0.00 97.11
07:22:07 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
07:22:08 PM lo 4.94 4.94 0.31 0.31 0.00 0.00 0.00
07:22:08 PM eth0 1.23 0.00 0.06 0.00 0.00 0.00 0.00
07:22:08 PM eth1 67.90 24.69 3.02 3.94 0.00 0.00 0.00
Average: CPU %user %nice %system %iowait %steal %idle
Average: all 3.63 0.00 2.55 0.84 0.00 92.98
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
Average: lo 212.61 212.61 50.54 50.54 0.00 0.00 0.00
Average: eth0 42.79 41.70 3.27 41.84 0.00 0.00 0.00
Average: eth1 492.48 432.48 53.63 110.40 0.00 0.00 0.00
浏览量:3
下载量:0
时间:
中央处理器(CentralProcessingUnit)的缩写,即CPU,CPU是电脑中的核心配件,只有火柴盒那么大,几十张纸那么厚,但它却是一台计算机的运算核心和控制核心。下面是读文网小编带来的关于动态切换Linux使用的CPU数量的内容,欢迎阅读!
摘要: 由于要测试一些代码,其运行结果会受到多核并行的影响,所以希望能够调整使用的 CPU 数量。网络上之前看到的方法是在内核的启动参数上添加一个 maxcpus,但是如果这样的话每切换一次都要重启一次,是在太麻烦了。想 ...
由于要测试一些代码,其运行结果会受到多核并行的影响,所以希望能够调整使用的 CPU 数量。
网络上之前看到的方法是在内核的启动参数上添加一个 maxcpus,但是如果这样的话每切换一次
都要重启一次,是在太麻烦了。想想 Linux 应该是很强大的,所以可以动态修改 CPU 数量才对。
无意中看到 Linux 代码的 Documentation 文件夹下有个文件叫做 cpu-hotplug.txt,于是就看了一下,
发现可以在 /sys/devices/system/cpu 看到代表各 CPU 的文件夹按照 cpuX 的命名方式,如 cpu0、
cpu1、cpu2 等。这些文件夹里面有一个 online 文件,如果其值为0则禁用该 CPU,如果为1则启用
该 CPU。注意,这里需要 root 权限哦。
因为我只要在单核和多核之间切换,所以我写了两个脚本放在 /usr/local/sbin 里面:
singlecore
#!/bin/bash
cpus_dir="/sys/devices/system/cpu"
for cpu in $(ls "$cpus_dir" | grep 'cpu[0-9]+')
do
cpu_online="$cpus_dir/$cpu/online"
if [[ -e "$cpu_online" && $(cat $cpu_online) = 1 ]]
then
echo 0 > "$cpu_online"
fi
done
multicore
#!/bin/bash
cpus_dir="/sys/devices/system/cpu"
for cpu in $(ls "$cpus_dir" | grep 'cpu[0-9]+')
do
cpu_online="$cpus_dir/$cpu/online"
if [[ -e "$cpu_online" && $(cat $cpu_online) = 0 ]]
then
echo 1 > "$cpu_online"
fi
done
之后需要切换的时候,只要运行 sudo singlecore 或者 sudo multicore 就可以了~
顺便说一句,我当时在想,如果我禁用了所有的 CPU 会怎么样呢?结果发现 cpu0 是
没有 online 文件的,也就是 Linux 至少保证一个 CPU 处于可用状态。
浏览量:2
下载量:0
时间:
同一个程序可以执行多次,每次都可以在内存中开辟独立的空间来装载,从而产生多个进程。不同的进程还可以拥有各自独立的IO接口。下面读文网小编为大家介绍下Linux的进程的相关知识。
算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存中寻找到某个地址等等。这些最基础的计算机动作被称为指令 (instruction)。所谓的程序(program),就是这样一系列指令的所构成的集合。通过程序,我们可以让计算机完成复杂的操作。程序大多数时候被存储为可执行的文件。这样一个可执行文件就像是一个菜谱,计算机可以按照菜谱作出可口的饭菜。
那么,程序和进程(process)的区别又是什么呢?
进程是程序的一个具体实现。只有食谱没什么用,我们总要按照食谱的指点真正一步步实行,才能做出菜肴。进程是执行程序的过程,类似于按照食谱,真正去做菜的过程。同一个程序可以执行多次,每次都可以在内存中开辟独立的空间来装载,从而产生多个进程。不同的进程还可以拥有各自独立的IO接口。
操作系统的一个重要功能就是为进程提供方便,比如说为进程分配内存空间,管理进程的相关信息等等,就好像是为我们准备好了一个精美的厨房。
看一眼进程
首先,我们可以使用$ps命令来查询正在运行的进程,比如$ps -eo pid,comm,cmd,下图为执行结果:
(-e表示列出全部进程,-o pid,comm,cmd表示我们需要PID,COMMAND,CMD信息)
每一行代表了一个进程。每一行又分为三列。第一列PID(process IDentity)是一个整数,每一个进程都有一个唯一的PID来代表自己的身份,进程也可以根据PID来识别其他的进程。第二列COMMAND是这个进程的简称。第三列CMD是进程所对应的程序以及运行时所带的参数。
(第三列有一些由中括号[]括起来的。它们是kernel的一部分功能,被打扮成进程的样子以方便操作系统管理。我们不必考虑它们。)
我们看第一行,PID为1,名字为init。这个进程是执行/bin/init这一文件(程序)生成的。当Linux启动的时候,init是系统创建的第一个进程,这一进程会一直存在,直到我们关闭计算机。这一进程有特殊的重要性,我们会不断提到它。
如何创建一个进程
实际上,当计算机开机的时候,内核(kernel)只建立了一个init进程。Linux kernel并不提供直接建立新进程的系统调用。剩下的所有进程都是init进程通过fork机制建立的。新的进程要通过老的进程复制自身得到,这就是fork。fork是一个系统调用。进程存活于内存中。每个进程都在内存中分配有属于自己的一片空间 (address space)。当进程fork的时候,Linux在内存中开辟出一片新的内存空间给新的进程,并将老的进程空间中的内容复制到新的空间中,此后两个进程同时运行。
老进程成为新进程的父进程(parent process),而相应的,新进程就是老的进程的子进程(child process)。一个进程除了有一个PID之外,还会有一个PPID(parent PID)来存储的父进程PID。如果我们循着PPID不断向上追溯的话,总会发现其源头是init进程。所以说,所有的进程也构成一个以init为根的树状结构。
如下,我们查询当前shell下的进程:
代码如下:
root@vamei:~# ps -o pid,ppid,cmd
PID PPID CMD
16935 3101 sudo -i
16939 16935 -bash
23774 16939 ps -o pid,ppid,cmd
我们可以看到,第二个进程bash是第一个进程sudo的子进程,而第三个进程ps是第二个进程的子进程。
还可以用$pstree命令来显示整个进程树:
代码如下:
init─┬─NetworkManager─┬─dhclient
│ └─2_{NetworkManager}]
├─accounts-daemon───{accounts-daemon}
├─acpid
├─apache2─┬─apache2
│ └─2_apache2───26_{apache2}]]
├─at-spi-bus-laun───2_{at-spi-bus-laun}]
├─atd
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─colord───2_{colord}]
├─console-kit-dae───64_{console-kit-dae}]
├─cron
├─cupsd───2_dbus]
├─2_dbus-daemon]
├─dbus-launch
├─dconf-service───2_{dconf-service}]
├─dropbox───15_{dropbox}]
├─firefox───27_{firefox}]
├─gconfd-2
├─geoclue-master
├─6_getty]
├─gnome-keyring-d───7_{gnome-keyring-d}]
├─gnome-terminal─┬─bash
│ ├─bash───pstree
│ ├─gnome-pty-helpe
│ ├─sh───R───{R}
│ └─3_{gnome-terminal}]
fork通常作为一个函数被调用。这个函数会有两次返回,将子进程的PID返回给父进程,0返回给子进程。实际上,子进程总可以查询自己的PPID来知道自己的父进程是谁,这样,一对父进程和子进程就可以随时查询对方。
通常在调用fork函数之后,程序会设计一个if选择结构。当PID等于0时,说明该进程为子进程,那么让它执行某些指令,比如说使用exec库函数(library function)读取另一个程序文件,并在当前的进程空间执行 (这实际上是我们使用fork的一大目的: 为某一程序创建进程);而当PID为一个正整数时,说明为父进程,则执行另外一些指令。由此,就可以在子进程建立之后,让它执行与父进程不同的功能。
子进程的终结(termination)
当子进程终结时,它会通知父进程,并清空自己所占据的内存,并在kernel里留下自己的退出信息(exit code,如果顺利运行,为0;如果有错误或异常状况,为》0的整数)。在这个信息里,会解释该进程为什么退出。父进程在得知子进程终结时,有责任对该子进程使用wait系统调用。这个wait函数能从kernel中取出子进程的退出信息,并清空该信息在kernel中所占据的空间。但是,如果父进程早于子进程终结,子进程就会成为一个孤儿(orphand)进程。孤儿进程会被过继给init进程,init进程也就成了该进程的父进程。init进程负责该子进程终结时调用wait函数。
当然,一个糟糕的程序也完全可能造成子进程的退出信息滞留在kernel中的状况(父进程不对子进程调用wait函数),这样的情况下,子进程成为僵尸(zombie)进程。当大量僵尸进程积累时,内存空间会被挤占。
进程与线程(thread)
尽管在UNIX中,进程与线程是有联系但不同的两个东西,但在Linux中,线程只是一种特殊的进程。多个线程之间可以共享内存空间和IO接口。所以,进程是Linux程序的唯一的实现方式。
总结
程序,进程,PID,内存空间
子进程,父进程,PPID,fork, wait
上面就是Linux的进程的相关知识介绍了,通过本文的阅读,相信你对Linux的进程有了更深入了了解,管理Linux的进程也更加容易。
浏览量:2
下载量:0
时间:
当你用shell启动一个程序时,往往他是在前台工作的。 例如经常用PUTTY连接到远程服务器执行脚本的时候,如果本地网络中断后,这个时候前台进程就结束了,比较的懊恼,必须重新执行。因此有必要进行前后台进程的切换。那么Linux系统如何切换前台进程和后台进程?下面跟着读文网小编一起去了解下吧。
在终端里输入firefox,那么会打开firefox,但当你关闭此终端或者ctrl+c强制终止时,firefox也随之关闭了。你可以在执行时后面加一个&,这样就在后台工作了。
一、Shell支持作用控制,有以下命令:
1. command &让进程在后台运行
2. jobs –l 查看后台运行的进程
3. fg %n 让后台运行的进程n到前台来
4. bg %n 让进程n到后台去;
PS:“n”为jobs查看到的进程编号。
二、执行命令&切换至后台
在Linux终端运行命令的时候,在命令末尾加上&符号,就可以让程序在后台运行
root@Ubuntu$ 。/tcpserv01&
三、切换正在运行的程序到后台
如果程序正在前台运行,可以使用Ctrl+z 选项把程序暂停,然后用 bg %[number]命令把这个程序放到后台运行,这个步骤分为3步,如下:
1.暂停程序运行CTRL+Z
ctrl + z跟系统任务有关的,ctrl + z可以将一个正在前台执行的命令放到后台,并且暂停。
[Oracle@linuxidc ~]$ sh ins.sh
[1]+Stopped ins.sh
2.查看暂停的程序
察看jobs使用jobs或ps命令可以察看正在执行的jobs。
[oracle@linuxidc ~]$ jobs -l
[1]+ 4524Stopped ins.sh
jobs命令执行的结果,+表示是一个当前的作业,减号表是是当前作业之后的一个作业。
jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped,Terminated
3.切换程序至后台
bg将一个在后台暂停的命令,变成继续执行如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。
[oracle@linuxidc ~]$ bg %1
[oracle@linuxidc ~]$ jobs -l
[1]+ 4524Running ins.sh
4.切换程序至前台
也可以用 fg %[number]指令把一个程序掉到前台运行
[oracle@linuxidc ~]$ fg %1
。/tcpserv01
5.终止后台程序
也可以直接终止后台运行的程序,使用 kill 命令
[oracle@linuxidc ~]$ kill %1
但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息。
以上就是Linux系统切换前台进程和后台进程的方法了,这样就可以让Linux前后台进程自由来回地切换了。
看过“ Linux系统切换前台进程和后台进程方法 ”
浏览量:3
下载量:0
时间:
当你用shell启动一个程序时,往往他是在前台工作的。 例如经常用PUTTY连接到远程服务器执行脚本的时候,如果本地网络中断后,这个时候前台进程就结束了,比较的懊恼,必须重新执行。因此有必要进行前后台进程的切换。那么Linux系统如何切换前台进程和后台进程?下面跟着读文网小编一起去了解下吧。
linux的进程的前后台切换命令我们有很多方法,在这里我们使用fg与bg命令来帮助我们实现我们要的方法,希望例子能帮助到各位哦。
在管理服务器的过程中,经常在编辑这个文件的时候,突然要查看其它的信息,这个是时候,通常的做法是退出编辑,然后去查看信息。
但如果结合了fg与bg命令,能让我们的工作效率更高。
涉及到进程间切换的命令有如下:
Ctrl+C
终止并退出前台命令的执行,回到SHELL
Ctrl+Z
暂停前台命令的执行,将该进程放入后台,回到SHELL
jobs
查看当前在后台执行的命令,可查看命令进程号码
&
运行命令时,在命令末尾加上&可让命令在后台执行
fg N
将命令进程号码为N的命令进程放到前台执行,同%N
bg N
将命令进程号码为N的命令进程放到后台执行
通过crtl+z可以把当前的信息放入后台去执行,想调用的时候,执行fg N就可以调用了,而这个N的查询可以通过jobs来实现。
比如:
[root@liufofu ~]# jobs
[1] Running /usr/local/mysql5.5.38/bin/mysqld_safe –user=mysql & (wd: /usr/local/mysql5.5.38)
[2]- Stopped vim x.py
[3]+ Stopped vim x.sh
假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,终止这个程序,然后可以看到系统提示:
[1]+ Stopped /root/bin/rsync.sh
如果没有此提示,则用 jobs 命令查看任务:
#jobs
[1]+ suspended /root/bin/rsync.sh &
然后我们可以把程序调度到后台执行:(bg 后面的数字为作业号)
#bg 1
[1]+ /root/bin/rsync.sh &
用 jobs 命令查看正在运行的任务:
#jobs
[1]+ Running /root/bin/rsync.sh &
如果想把它调回到前台运行,可以用
#fg 1
/root/bin/rsync.sh
这样,你在控制台上就只能等待这个任务完成了
调用的时候,通过fg 2就可以调用刚才编辑的x.py继续工作了。
看过“ linux的进程的前后台切换命令与方法 ”
浏览量:2
下载量:0
时间:
Linuxlinux中显示所有进程下使用PS命令结合相关参数可以查看linux当前系统下的所有进程、那么linux中怎么显示所有进程呢?接下来大家跟着读文网小编一起来了解一下的解决方法吧。
可以使用ps命令。它能显示当前运行中进程的相关信息,包括进程的PID。Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息。ps命令能提供一份当前进程的快照。如果你想状态可以自动刷新,可以使用top命令。
ps命令
输入下面的ps命令,显示所有运行中的进程:
# ps aux | less
其中,
-A:显示所有进程
a:显示终端中包括其它用户的所有进程
x:显示无控制终端的进程
任务:查看系统中的每个进程。
# ps -A
# ps -e
任务:查看非root运行的进程
# ps -U root -u root -N
任务:查看用户vivek运行的进程
# ps -u vivek
任务:top命令
top命令提供了运行中系统的动态实时视图。在命令提示行中输入top:
# top
输出:
图1:top命令:显示Linux任务
按q退出,按h进入帮助。
任务:显示进程的树状图。
pstree以树状显示正在运行的进程。树的根节点为pid或init。如果指定了用户名,进程树将以用户所拥有的进程作为根节点。
$ pstree
输出示例:
图2:pstree - 显示进程的树状图
任务:使用ps列印进程树
# ps -ejH
# ps axjf
任务:获得线程信息
输入下列命令:
# ps -eLf
# ps axms
任务:获得安全信息
输入下列命令:
# ps -eo euser,ruser,suser,fuser,f,comm,label
# ps axZ
# ps -eM
任务:将进程快照储存到文件中
输入下列命令:
# top -b -n1 > /tmp/process.log
你也可以将结果通过邮件发给自己:
# top -b -n1 | mail -s 'Process snapshot' you@example.com
看过“linux中怎么显示所有进程”
浏览量:3
下载量:0
时间:
要想对系统进程进行监测和控制,首先必须要了解当前进程的情况,那么linux怎么查看进程呢?今天读文网小编与大家分享下linux查看进程的具体操作步骤,有需要的朋友不妨了解下。
使用搜索功能搜索“Terminal”,打开Ubuntu命令行终端。
通过控制台Terminal,执行ps的帮助命令“ps --help a”查看ps命令支持的参数列表。
在控制台,使用命令“ps -A”查看当前系统所有的进程。
在控制台使用ps命令“ps -aux|less”,查看当前系统正在运行的所有进程。
在控制台使用ps命令“ps -U root -u root -N”,查看当前系统中非root运行的所有进程。
6在控制台使用ps命令“ps -u test”,查看当前系统中test用户运行的所有进程。
看过“linux怎么查看进程”
浏览量:3
下载量:0
时间:
windows操作系统查看当前进程的操作十分简单,调出任务管理器即可,但是在linux中怎么显示查询进程呢?接下来大家跟着读文网小编一起来了解一下linux显示查询进程的解决方法吧。
首先我们需要打开终端,本经验以Fedora操作系统为例,其他的操作系统可能略有不同。打开终端之后我们输入ps,它就是我们今天的主角,ps是linux操作系统中最基本同时也是非常强大的进程查看命令,如果你对此命令不是十分了解,我们可以输入ps --help命令来查看此命令的帮助信息。
通过帮助信息我们可以看到,ps命令的相关参数有很多,很多初学的朋友可能会看的一头雾水,不知道该怎么组合这些参数,下面小编就举一些实际应用例子,来介绍一些比较常用的查看进程的固定命令组合。
我们先来看第一个命令,ps -l命令。这个命令和直接使用ps效果类似,但是不同之处在于使用ps命令获得结果很短,而使用-l参数之后将会较长、较详细的列出该PID的的信息列出,由于参数较多,小编就不一一介绍各个参数的含义了,如果想要了解参数的具体含义可以上网查看相关信息。
接着我们来看第二个命令ps aux,有“-”符号和没有两者是有区别的,这个命令应该是比较常用的一个命令,作用就是列出目前所有的正在内存当中的程序,其中a表示显示现行终端机下的所有程序,包括其他用户的程序,u表示以用户为主的格式来显示程序状况,x表示显示所有程序,不以终端机来区分,它的相关参数也不少,例如user,表示属于那个使用者账号的,%CPU表示使用掉的CPU资源百分比,其他的参数小编就不一一的介绍了,有兴趣可以自行查看。
第三个要介绍的命令就是ps -lA命令,跟ps -l命令输出的格式一样,唯一不同的是多了一个A参数,A的作用就是显示出所有进程,因此使用此命令之后输出的结果会非常的多,如果非必要不建议使用此命令。
第四个命令就是ps ajxf,其中a和x表示的意义已经介绍过了,下面我们看下j的意义,j表示采用工作控制的格式显示程序状况,f则表示用ASCII字符显示树状结构,表达程序间的相互关系,输出的结果类似程序树显示。
以上就是linux下查看进程的方法,当然小编介绍的ps命令只是一些基本的参数命令和用法,由于ps能够支持的操作系统很多,因此命令参数也非常庞大,想要弄通弄懂它,需要我们经常使用,勤加练习方能做到。
看过“linux中怎么显示查询进程”
浏览量:5
下载量:0
时间: