Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是否可以恢复已终止的子进程?_C_Process Management - Fatal编程技术网

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