C 是否可以恢复已终止的子进程?
我正在尝试为一个基本的过程控制块编写一个程序,下面的代码显示了我在测试阶段所做的工作,我想知道我们是否可以恢复一个被杀死的孩子,而不是再次分叉一个新的孩子。如果是,我们如何做。 提前谢谢C 是否可以恢复已终止的子进程?,c,process-management,C,Process Management,我正在尝试为一个基本的过程控制块编写一个程序,下面的代码显示了我在测试阶段所做的工作,我想知道我们是否可以恢复一个被杀死的孩子,而不是再次分叉一个新的孩子。如果是,我们如何做。 提前谢谢 代码: ` #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 int hell() { int j; 对于(j=1;j当您向孩子发出kill命令时,您可以使用SIGSTOP挂起它,而不使它死亡,然后使用SIGCONT在它停止的位置恢复它 #include <stdio.h>
代码:
`
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int hell()
{
int j;
对于(j=1;j当您向孩子发出kill命令时,您可以使用SIGSTOP挂起它,而不使它死亡,然后使用SIGCONT在它停止的位置恢复它
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
int main() {
pid_t childId;
if ( ( childId = fork() ) == -1 ) {
printf( "child fork failed\n" );
} else if ( childId == 0 ) {
int i = 0;
while ( 1 ) {
printf( "infinite child loop ==> %d\n", ++i );
sleep( 1 );
}
} else {
printf( "parent: child started OK\n" );
sleep( 5 );
printf( "parent: stopping child - but letting it live\n" );
kill( childId, SIGSTOP );
sleep( 5 );
printf( "parent: resuming child since it stopped but never really died\n" );
kill( childId, SIGCONT );
printf( "parent: child should be running again where it left off\n" );
sleep( 5 );
}
}
当您向子级发出kill命令时,您可以使用SIGSTOP挂起它,而不会使它死亡,然后使用SIGCONT在停止的位置继续执行它
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
int main() {
pid_t childId;
if ( ( childId = fork() ) == -1 ) {
printf( "child fork failed\n" );
} else if ( childId == 0 ) {
int i = 0;
while ( 1 ) {
printf( "infinite child loop ==> %d\n", ++i );
sleep( 1 );
}
} else {
printf( "parent: child started OK\n" );
sleep( 5 );
printf( "parent: stopping child - but letting it live\n" );
kill( childId, SIGSTOP );
sleep( 5 );
printf( "parent: resuming child since it stopped but never really died\n" );
kill( childId, SIGCONT );
printf( "parent: child should be running again where it left off\n" );
sleep( 5 );
}
}
什么?如果它能活下去,什么叫“杀死”呢?育儿的第一条规则:在你绝对确定你不想让你的孩子活下去之前不要杀死他们。什么?如果它能活下去,什么叫“杀死”呢?育儿的第一条规则:在你绝对确定你不想让他们活下去之前不要杀死你的孩子。谢谢你,我明白你的意思了ying试图传达,但这带来了另一个疑问…如果孩子在中断中突然被杀死怎么办?例如:我正在从一个终端执行此代码,从另一个终端使用kill cmd和孩子pid来杀死进程..?我希望你明白我的意思..kill命令的名称不好。它发送信号并接收信号可能会也可能不会导致进程退出。这取决于它是哪个信号。此外,您的进程可以处理某些信号,但不能处理其他信号,如SIGSTOP。谢谢您我理解您试图传达的内容,但这带来了另一个疑问……如果孩子在中断中突然死亡会怎样?例如:我正在从一个t执行此代码Terminal和从另一个我使用kill cmd和子pid来终止进程。我希望你明白我的意思。kill命令的名称不好。它发送信号,接收信号可能会导致进程退出,也可能不会导致进程退出。这取决于它是哪个信号。此外,进程可以处理一些信号,但不能处理其他信号,如SIGSTOP。
parent: child started OK
infinite child loop ==> 1
infinite child loop ==> 2
infinite child loop ==> 3
infinite child loop ==> 4
infinite child loop ==> 5
infinite child loop ==> 6
parent: stopping child - but letting it live
parent: resuming child since it stopped but never really died
parent: child should be running again where it left off
infinite child loop ==> 7
infinite child loop ==> 8
infinite child loop ==> 9
infinite child loop ==> 10
infinite child loop ==> 11
infinite child loop ==> 12