linux-shell-学习Linux-waitpid-Shell-waitpid的用法 (linux系统)

教程大全 2025-07-15 11:59:46 浏览

在Linux shell编程中,wtpid函数是一种非常有用的功能。它允许程序在等待特定的子进程退出时继续执行其他代码。在本文中,我们将深入探讨Linux Shell中wtpid函数的使用,包括函数的语法、作用以及使用示例。

1. wtpid函数的语法

wtpid函数的语法如下:

pid_t wtpid(pid_t pid, int *status, int options);

wtpid函数需要三个参数,具体如下:

(1)pid: 需要等待的子进程的ID号。如果pid的值为-1,则等待任何子进程退出。

(2)status:等待的子进程的状态存储在status指向的整数变量中。

(3)options:用于指定wtpid函数的操作选项。

2. wtpid函数的作用

wtpid函数可以阻塞Shell脚本直到某个特定子进程结束运行。这个函数允许Shell脚本跟踪子进程的状态,维护子进程的信息,并且可以根据需要采取相应措施。

当一个Shell脚本启动一个子进程时,通常会等待该子进程结束,在等待期间,脚本可以执行其他任务。当子进程结束时,wtpid函数会返回该子进程的状态,Shell脚本可以根据该状态对子进程做出相应的处理。

例如,如果子进程返回退出状态0,则表示子进程正常退出。如果子进程返回退出状态为非0,则表示子进程异常退出,Shell脚本可以选择重启该进程或者进行其他处理。

3. wtpid函数的使用示例

下面我们来看一个wtpid函数的使用示例:

#!/bin/bash

echo “Starting program…”

./my_program &

echo “PID is $PID”

echo “Program has finished”

上面的代码启动了一个名为my_program的程序,然后将其放入后台运行,并将进程ID存储在变量PID中。然后,使用wtpid函数等待my_program程序退出。当my_program程序退出时,Shell脚本输出”Program has finished”。

在Linux Shell编程中,wtpid函数是一个非常有用的功能。它允许程序在等待特定的子进程退出时继续执行其他代码。通过对wtpid函数的深入学习,可以帮助程序员更好地掌握Linux Shell编程的技巧和方法。通过以上的学习,相信大家对wtpid函数的使用已经掌握得很熟练了。

相关问题拓展阅读:

linux 下怎么处理zombie processes

定义

In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for it, is called a zombie.

在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程. 在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程。

如何查看linux系统上的僵尸进程,如何统计有多少僵尸进程?

#ps -ef | grep defunct

或者查找状态为Z的进程,Z就是代表zombie process,僵尸进程的意思。

另外使用top命令查看时有一栏为S,如果状态为Z说明它就是僵尸进程。

Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie

top命令中也统计了僵尸进程。或者使用下面的命令:

linux

ps -ef | grep defunct | grep -v grep | wc -l

如何杀死僵尸进程呢?

一般僵尸进程很难直接kill掉,不过您可以kill僵尸爸爸。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进并银程也跟着消失。

ps -e -o ppid,stat | grep Z | cut -d” ” -f2 | xargs kill -9

kill -HUP `ps -A -ostat,ppid | grep -e ’^‘ | awk ’{print $2}’`

当然您可以自己编写更好的shell脚本,欢迎与大家分享。

我将nova-novncproxy stop后再start,僵尸进程即消失,问题解决。

另外子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。就是基于这样的原理:就算父进程没有调用wait,内核也会向它发送绝指宴SIGCHLD消息,而此时,尽管对它的默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。

如何避免僵尸进程呢?

处理SIGCHLD信号并不是必须的。但对于某些进程,特别是 服务器 进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下 可以简单地将 SIGCHLD信号的操作设为SIG_IGN。

signal(SIGCHLD,SIG_IGN);

这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程

或者

关于linux shell waitpid的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。


linux shell 读取一个配置文件并获取其中的全部内容,急!!!!!!!

下面是读取配置文件,作为变量显示出来,实例如下:[lotto@ftptest2 ~]$ cat =/data/sourceusername=myuserpassword=mypassword[lotto@ftptest2 ~]$ cat #!/bin/sheval `cat ./`echo $usernameecho $pathecho $password[lotto@ftptest2 ~]$ .//data/sourcemypassword

linux中的进程(PID)有什么意义

PID中文来说就是进程标识符,英文全称为Process Identifier

PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。 进程中止后PID被系统回收,可能会被继续分配给新运行的程序。 PID一列代表了各进程的进程ID,也就是说,PID就是各进程的身份标识。

只要运行一程序,系统会自动分配一个标识!

是暂时唯一:进程中止后,这个号码就会被回收,并可能被分配给另一个新进程。只要没有成功运行其他程序,这个pid会继续分配给当前要运行的程序!!如果成功运行一个程序,然后再运行别的程序时,系统会自动分配另一个pid!

Linux进程查看

[例18] 查看登录用户的详细情况,键入:$ who -uH显示如下:USER LINE LOGIN-TIME IDLE Fromroot tty1 Mar 17 13:49 . foxy tty2 Mar 17 13:49 00:01 root tty3 Mar 17 13:49 00:01bbs ttyp0 Mar 17 13:49 00:01 () 这样一目了然。 其中-u选项指定显示用户空闲时间,所以可以看到多了一项IDLE。 第一个root用户的IDLE项是一个“.”,这就说明该用户在前1秒仍然是活动的,而其他用户后面都有一个时间,称为空闲时间。 最后来看看使用“who am i”格式命令的结果!root tty1 Mar 17 13:49可见只显示出了运行该who命令的用户情况,当然这时候不存在空闲时间。 who命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。 w命令该命令也用于显示登录到系统的用户情况,但是与who不同的是,w命令功能更加强大,它不但可以显示有谁登录到系统,还可以显示出这些用户当前正在进行的工作,并且统计数据相对who命令来说更加详细和科学,可以认为w命令就是who命令的一个增强版。 w命令的显示项目按以下顺序排列:当前时间,系统启动到现在的时间,登录用户的数目,系统在最近1秒、5秒和15秒的平均负载。 然后是每个用户的各项数据,项目显示顺序如下:登录帐号、终端名称、远程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。 其中JCPU时间指的是和该终端(tty)连接的所有进程占用的时间。 这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间。 而PCPU时间则是指当前进程(即在WHAT项中显示的进程)所占用的时间。 下面介绍该命令的具体用法和参数。 语法格式如下:w -[husfV] [user] 下面对参数进行说明:-h 不显示标题。 -u 当列出当前进程和CPU时间时忽略用户名。 这主要是用于执行su命令后的情况。 -s 使用短模式。 不显示登录时间、JCPU和PCPU时间。 -f 切换显示FROM项,也就是远程主机名项。 默认值是不显示远程主机名,当然系统管理员可以对源文件作一些修改使得显示该项成为默认值。 -V 显示版本信息。 User 只显示指定用户的相关情况。 [例19] 显示当前登录到系统的用户的详细情况$ w 2:50pm up 2 min, 4 users, load average:0.22,0.16,0.06USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 2:49pm 0:00s 0.56s 0.10s wfoxy tty2 2:49pm 1:09 0.42s 0.42s bashroot tty3 2:49pm 46.00s 0.67s 0.25s telnet bbs3 bbs ttyp0 2:49pm 45.00s 0.49s 0.49s bbs h

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐