
是的。Unix/Linux *** 作系统提供了一个fork()调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为 *** 作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程子进程内返回。子进程永远返回0,而父进程返回子进程的ID。因为一个父进程可以fork出很多子进程,所以父进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到父进程的ID。
放到后台去执行,前台已经不管其执行情况了,返回的仅仅是放入后台这个 *** 作成功与否而非命令本身,那肯定都是成功的。
后台获取ls -l 命令的执行情况,可以考虑将错误输出流(2)导入标准输出(1)获取命令打印结果加以判断。如:
ret=`ls -l my 2>&1 &`
# 如果是用脚本执行的话,需要在这里判断进程是否存在,等待命令执行完;或者sleep足够长的时间
echo $ret | grep "No such file or directory" >/dev/null 2>&1
if [ $ -eq 0 ]; then
echo "Failed"
else
echo "Successful"
fi
或者也可以考虑写文件的方式,若后台命令执行发生错误,写错误日志,判断存在错误日志且大小不为0,就能知道命令执行发生错误了。这样做的好处是,不涉及具体错误信息的判断。
errlog=/tmp/errlog
size=0
ls -l my 2>$errlog &
# 如果是用脚本执行的话,需要在这里判断进程是否存在,等待命令执行完;或者sleep足够长的时间
[ -f $errlog ] && size=`wc -c $errlog | cut -d' ' -f1`
if [ $size -gt 0 ]; then
echo "Failed"
else
echo "Successful"
fi
任务管理器里面,把ppid一栏打开即可。
任务管理器里面,把ppid一栏打开,就看到了,ppid就是父进程的进程号在windows下查看某个运行程序(或进程)的命令行参数使用下面的命令。
子进程:指的是由另一进程所创建的进程。子进程继承了对应的父进程的大部分属性,在Unix中,子进程通常为系统调用fork的产物。子进程一开始就是父进程的副本,根据具体需要,子进程可以借助exec调用来链式加载另一程序。一个进程可能下属多个子进程,但最多只能有1个父进程,某一进程没有父进程,可知该进程由内核直接生成。在Unix与类Unix系统中,进程ID为1的进程是在系统引导阶段由内核直接创建的,不会在系统运行过程中终止执行;对于其他无父进程的进程,是为在用户空间完成各种后台任务而执行的。在对应的父进程结束执行后,进程就会变成孤儿进程,会立即由init进程收养为其子进程。
父进程:指已创建一个或多个子进程的进程。
以上就是关于得到子进程id号的系统调用是getppid全部的内容,包括:得到子进程id号的系统调用是getppid、shell如何获取后天运行的子进程的退出状态、子进程怎么获得父进程的资源等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)