История изменений
Исправление shaplov, (текущая версия) :
Я ее таки победил.
Ключевым моментом в понимании была статья https://blog.nelhage.com/2011/02/changing-ctty/ рекомендую всем заинтересованным лицам.
То что пытался сделать я, в примере я дочерний процесс выдирал в отдельную сессию. И по какой-то причине reptyr
с этим не справлялся. А вот если выдрать дочерний процесс в отдельную группу в рамках той же сессии, то reptyr
это уже осиливает. Делается это вызовом setpgid($$,$$)
который назначает процесс группой самому себе.
Суммарно код примера выглядит так:
#!/usr/bin/perl
use strict;
use POSIX;
my $pid = fork();
if ($pid)
{
print "$pid\n";
sleep 10;
while (1) {print ".\n"; sleep 1};
} else
{
my $i=0;
(setpgid($$,$$) != -1) || die "Can't create own group: $!";
sleep 10;
while (1) {print "$i\n"; sleep 1; $i++};
}
Он напечатает в консоли pid дочернего процесса, и в другой консоли надо дать команду
$ reptyr [это самый pid]
В результате точки из родительского процесса станут печататься в старой консоли, а циферки из дочернего процесса – в новой. Чего собственно говоря и хотелось добиться…
Исходная версия shaplov, :
Я ее таки победил.
Ключевым моментом в понимании была статья https://blog.nelhage.com/2011/02/changing-ctty/ рекомендую всем заинтересованным лицам.
То что пытался сделать я, в примере я дочерний процесс выдирал в отдельную сессию. И по какой-то причине reptyr
с этим не справлялся. А вот если выдрать дочерний процесс в отдельную группу в рамках той же сессии, то reptyr
это уже осиливает. Делается это вызовом setpgid($$,$$)
который назначает процесс группой самому себе.
Суммарно код примера выглядит так:
#!/usr/bin/perl
use strict;
use POSIX;
my $pid = fork();
if ($pid)
{
print "$pid\n";
sleep 10;
while (1) {print ".\n"; sleep 1};
} else
{
my $i=0;
(setpgid($$,$$) != -1) || die "Can't start a new session: $!";
sleep 10;
while (1) {print "$i\n"; sleep 1; $i++};
}
Он напечатает в консоли pid дочернего процесса, и в другой консоли надо дать команду
$ reptyr [это самый pid]
В результате точки из родительского процесса станут печататься в старой консоли, а циферки из дочернего процесса – в новой. Чего собственно говоря и хотелось добиться…