public function testTerminateWithStopAndContinueSignalsUsingEventLoop()
 {
     if (defined('PHP_WINDOWS_VERSION_BUILD')) {
         $this->markTestSkipped('Windows does not report signals via proc_get_status()');
     }
     if (!defined('SIGSTOP') && !defined('SIGCONT')) {
         $this->markTestSkipped('SIGSTOP and/or SIGCONT is not defined');
     }
     $loop = $this->createloop();
     $process = new Process('sleep 1; exit 0');
     $called = false;
     $exitCode = 'initial';
     $termSignal = 'initial';
     $process->on('exit', function () use(&$called, &$exitCode, &$termSignal) {
         $called = true;
         $exitCode = func_get_arg(0);
         $termSignal = func_get_arg(1);
     });
     $loop->addTimer(0.001, function (Timer $timer) use($process) {
         $process->start($timer->getLoop());
         $process->terminate(SIGSTOP);
         $this->assertSoon(function () use($process) {
             $this->assertTrue($process->isStopped());
             $this->assertTrue($process->isRunning());
             $this->assertEquals(SIGSTOP, $process->getStopSignal());
         });
         $process->terminate(SIGCONT);
         $this->assertSoon(function () use($process) {
             $this->assertFalse($process->isStopped());
             $this->assertEquals(SIGSTOP, $process->getStopSignal());
         });
     });
     $loop->run();
     $this->assertTrue($called);
     $this->assertSame(0, $exitCode);
     $this->assertNull($termSignal);
     $this->assertFalse($process->isRunning());
     $this->assertSame(0, $process->getExitCode());
     $this->assertNull($process->getTermSignal());
     $this->assertFalse($process->isTerminated());
 }