Linux进程是操作系统内核下行运行的应用程序,它是操作系统进行运行调度和管理的重要单位。本文将介绍如何创建和管理 Linux 进程。
一、创建进程
Linux操作系统使用fork() 和execve()系统调用来创建进程。使用fork()系统调用创建一个新的进程,它与原父进程具有相同的内存和虚拟地址空间,但新进程的唯一不同之处是它有一个不同的PID(ProcessID)。使用execve()系统调用,父进程可以将新的进程替换为另一个新进程,也就是替换新的指令地址空间和新的程序的控制。

实例:
int main(int argc, char *argv[]) {
printf(” before fork\n”);
pid = fork(); /*创建子进程*/
if (pid == -1)
printf(” create process failure\n”);
else if (pid == 0) {
printf(” I’m atthe child process :%d , parent process id %d \n”, getpid(), getppid());
printf(” I’m atthe parent process :%d child process id %d \n”, getpid(), pid);
二、管理进程
对于已经创建的进程,我们可以使用多种不同的方法进行管理,包括停止/暂停/继续/杀死进程等等。
(1)终止进程
kill()系统调用可以终止进程,它可以将信号发送到指定的进程上。如果要发送SIGKILL信号(终止进程),可以使用下面的代码:
int kill(pid_t pid, int sig); // pid 指定的进程ID,sig 指要发送给该进程的信号
可以使用下面的示例代码来终止指定的进程:
int main(int argc, char *argv[]){
pid = atoi(argv[1]);
if(kill(pid, SIGKILL)
perror(“error kill”);
(2)暂停/继续进程
Linux提供了特殊的信号,可以暂停/继续进程,即SIGSTOP和SIGCONT信号。使用下面的代码可以暂停指定的进程:
int main(int argc, char *argv[]){
pid=atoi(argv[1]);
if(kill(pid, SIGSTOP)
perror(“error stop”);
要继续进程运行,可以使用下面的代码:
int main(int argc, char *argv[]){
pid=atoi(argv[1]);
if(kill(pid, SIGCONT)
perror(“error cont”);
综上所述,Linux使用fork()系统调用来创建新进程,使用execve()系统调用替换新进程,使用kill()系统调用终止进程,使用SIGSTOP和SIGCONT信号可以暂停/继续进程。通过以上介绍,希望能帮助到大家更好的了解Linux进程的建立和管理。
香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
如何在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任务图1:top命令:显示Linux任务按q退出,按h进入帮助。 任务:显示进程的树状图。 pstree以树状显示正在运行的进程。 树的根节点为pid或init。 如果指定了用户名,进程树将以用户所拥有的进程作为根节点。 $ pstree输出示例:图2: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/你也可以将结果通过邮件发给自己:# top -b -n1 | mail -s Process snapshot 任务:查找进程使用pgrep命令。 pgrep能查找当前正在运行的进程并列出符合条件的进程ID。 例如显示firefox的进程ID:$ pgrep firefox下面命令将显示进程名为sshd、所有者为root的进程。 $ pgrep -u root sshd向htop和atop说hellohtop是一个类似top的交互式进程查看工具,但是可以垂直和水平滚动来查看所有进程和他们的命令行。 进程的相关操作(killing,renicing)不需要输入PID。 要安装htop输入命令:# apt-get install htop或# yum install htop在命令提示行中输入htop:# htop输出示例:图3:htop - Interactive Linux / UNIX process viewer图3:htop - Interactive Linux / UNIX process vieweratop工具atop是一个用来查看Linux系统负载的交互式监控工具。 它能展现系统层级的关键硬件资源(从性能角度)的使用情况,如CPU、内存、硬盘和网络。 它也可以根据进程层级的CPU和内存负载显示哪个进程造成了特定的负载;如果已经安装内核补丁可以显示每个进程的硬盘和网络负载。 输入下面的命令启动atop:# atop
如何开启windows10下的linux系统
linux命令是对Linux系统进行管理的命令。 对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。 linux命令在系统中有两种类型:内置Shell命令和Linux命令。 以下是win10中使用linux命令的方法:1首先,点击屏幕左下角的Win图标,然后在弹出的菜单中选择“所有应用”。 2在所有应用中找到并展开 Windows PowerShell 文件夹,启动其下的 Windows PowerShell。 3这时,将会打开一个命令行窗口。 然后,请稍微等待一会,直到出现 PowerShell 命令提示符为止。 4这时,便可以输入 Linux 命令了。 例如,输入一个 Linux 文件查看命令 ls,回车,便可以列出当前目录下的文件和文件夹列表。 注意事项Windows PowerShell 支持绝大部分 Linux 内置命令,但有些命令例外。 具体来说有:1)命令简写(或称命令别名)例如,不支持 Linux 下的文件查看命令 ll 。 该命令作用为以详细信息方式查看当前目录下文件,它实质是 ls -l 命令的简写。 2)需要调用 linux 系统中的程序才能执行的命令,如 vim由于 Windows 系统中并没有内置 vim 程序,故而与 vim 有关的命令无法启用。 3)帮助命令在 Linux 系统中,如果要知道某条命令的用法,可以使用帮助命令了。 但在 Windows 中,默认是没有安装Linux中的帮助命令的。 如果想使用该命令,可以联网安装或在线查看。 模式切换1、 由图形到字符#logout或init 32、由字符到图形界面init 53、退出consolelogout或exit或ctrl+d4、 注销Ctrl + Alt + Backspace5、 关机#poweroff或init 0或shutdown -h now或 halt -p6、 重启#reboot或init 6或shutdown -r now
linux用户级进程跟内核线程(进程)有什么差别
1、几乎所有的程序都要切换到内核态运行再返回用户态,用中断完成的,因为在内核下封装了一些东西,用户态下只是传入某些参数后调用内核态下的函数罢了,2、进程有三态(执行态,就绪态,阻塞态),cpu任何时刻都只有一个进程在执行,so从用户态切换到内核态时,用户态下的进程就处于阻塞或就绪态了,至于从用户态切换到内核态执行哪个函数那就看你在用户态下执行的是什么函数了,比如在用户态下的lseek在内核下就是llseek了,不一样的。3、这问题就是linux的内存管理了,这里就得提到三种地址(逻辑地址、线性地址、物理地址),这里我们提到的4G地址是逻辑地址,不是我们实际的物理地址,linux中一个进程用户占0-3G对应的内核占3G-4G部分说得不是很清楚,这是比较复杂的内容,需要从头看起,单就这几个问题是不能搞懂linux的,最好还是系统的学习,不断的重复
发表评论