Articles of 退出

如何避免在C中的我的容器服务器的用户定义库程序中的“退出”?

我正在为C语言库编写一个容器服务器 系统库dl作为dynamic链接加载器,用于实现编程接口。 这是dlopen / dlsym函数。 要将控制权返回给容器服务器,可以使用return和exit 。 return是好的。 但是用户程序中的exit()会导致容器服务器也退出。 我如何支持在用户程序中退出? 我想在调用dynamic链接加载器时重写exit函数。

在UNIX(或LINUX)中退出并等待函数

我正在编写一个程序,模拟一个基于Unix的操作系统,我有一些问题: 来自unix.org wait()函数将暂停调用线程的执行,直到其终止的subprocess之一的状态信息可用,或者直到发送其操作是执行信号捕获function或终止进程的信号 让我们想象一下,有两个subprocessB和C的进程A. 如果B和C调用退出函数,然后A调用wait函数,哪个退出状态将被检索? 来自B的还是来自C的 ? 首先,为什么? 当进程处于等待状态时,它不会执行它的代码,直到例如一个已终止的subprocess的状态信息可用为止,对吗? 所以不能在等待的时候调用叉子function,对吗? 3.在UNIX中通常可以杀死进程的时间有什么限制吗? 3.A. 用户是否有权终止根进程? (所有的根进程?)

使用C中的exit()和wait()从subprocess返回父进程的值

status的值不能正确地从subprocess返回到父进程。 #include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/wait.h> #include<stdlib.h> #include<string.h> #define BUF_SIZE 200 int main(void){ pid_t pid; int status=6; char buf[BUF_SIZE]; pid=fork(); if(pid){ sprintf(buf,"Value in parent process is %d\n",status); write(1,buf,strlen(buf)); wait(&status); sprintf(buf,"Value returned from child process is %d\n",status); write(1,buf,strlen(buf)); } else if(pid==0){ status++; sprintf(buf,"Returning %d..\n",status); write(1,buf,strlen(buf)); exit(status); } return 0; } 代码的输出是: Value in parent process is 6 […]

如何将返回码传递给at_exit函数

是否有一个“内置”的方式来知道退出代码传递给出口处理程序安装与atexit内退出? 例如,如果调用exit(EXIT_FAILURE) ,我的处理程序将执行与exit(EXIT_SUCCESS)情况下不同的操作。 我可以用一个全局variables来解决这个问题,但是无论我的程序在哪里,这都会否定exit的安慰。

程序退出状态

我在Linux中有一个关于程序退出状态的问题。 在我的程序中,我分叉了一个subprocess并调用waitpid来获取它。 当waitpid返回时,我想检查我的subprocess的退出状态。 我转向手动寻求帮助,并发现waitpid的第二个参数将保持退出状态,我可以使用macrosWEXITSTATE来读取它。 但是,这个macros只是提取真正的退出状态的最低有效8位,而在函数exit(int ret_val)手册中,它将以ret_val & 0x377而不是最低有效8位退出。 我的问题是,其他更多的位在哪里? 我们简单地放下它们吗? 为什么Linux采用这种策略? 这个实现不会给我们的程序带来麻烦吗? 感谢和最好的问候。

exit()vs _exit():调用_exit()是否确保closures所有打开的fd和套接字?

我用exit()来终止进程。 我没有任何退出处理程序注册,我也不关心在退出时冲洗缓冲区,所以想用_exit()作为更健壮的方法来终止进程。 唯一的问题是, _exit()处理closures所有打开的文件描述符并优雅地打开套接字?

退出function在Linux上

在我的应用程序中读取/写入文件时,如果文件没有正确closures,我想退出(1)。 在Windows上,它运行良好,但在Linux上出现这个错误: 'exit' was not declared in this scope 我该如何解决这个问题? 谢谢。

程序退出状态255 C + +主与Ada

我有一套单线程的C ++主干,它们的大部分代码是在Ada中开发的。 这是在Atego(Rational)Apex Duo中构build的,目标是32位RHEL 6.3 Linux。 exec是我开发的一个Class系统,包括套接字,一个状态机和一个定时器类,它是exec的核心。 类系统用于在通过套接字进行通信的6个不同系统上构build并执行14个独立的执行程序。 它们都使用相同的Class系统,并在启动时根据INI文件进行自我configuration。 执行者通过gettimeofday使用linux系统时钟,以50或60 Hz的频率帧 struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ }; 和一个简单的非繁忙等待algorithm来生成所需的调度器。 我目前面临的问题是,这些高pipe随意地(似乎)失败。 失败似乎是他们停止构思。 我将所有的运行时C ++程序封装在“try {} catch(…){}”中,并且没有任何内容被捕获。 同样,Ada例程受到不受影响的exception处理程序的保护。 这位高pipe经常会在失败前一个多小时快乐地跑过一个多小时。 没有迹象表明内存蠕变是明显的(使用系统监视器)。 我已经将Atego Rational Graphical Debugger附加到已经运行的高pipe上,但是无济于事。 当最后一个失败时,调用堆栈中没有任何内容,debugging器日志中唯一的提示是应用程序“已退出255”。 我担心系统中某个(Linux)系统例程或驱动程序正在调用Exit。 看起来SOMETHING正在呼唤退出! 任何人有任何想法如何我可以进一步调配这个问题?

执行asynchronousI / O操作时退出

一个程序可能会先用aio_read()或aio_write()发出asynchronousI / O操作,然后调用exit()来终止它自己。 … aio_write(aiocbp); exit(0); 我的问题是,将exit()调用等待,直到asynchronousI / O完成或程序将直接终止?

如果退出时库不是“清理”库,会发生什么情况

我正在运行的Linux,只是想知道实际发生的后处理死亡的代码库没有“清理”通过运行终止function或类似的东西。 我已经看到人们对退出function实施特定的清理,而其他人则不这样做。