Message347914
This is IMHO not a bug in Python, the problem can been seen when you rewrite the code in msg170261 in C, see the code below.
An observation with the C code below: Both moving ``close(slave)`` to above the sleep or removing that close entirely fixes the problem for me. Likewise with adding ``usleep(700000);`` to the child before exiting.
It is unclear to me who's at fault here, this could be a bug in the macOS kernel but could also be a bug in this code. It looks like the output is lost when ``close(slave)`` happens after the child proces has exited.
BTW. All testing was done on macOS 10.14.5, with python 3.8.
Anyway: I propose closing this issue because this is not a bug in CPython.
/* The C code used to test system behaviour */
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <util.h>
int main(void)
{
int master, slave;
int r;
pid_t pid;
r = openpty(&master, &slave, NULL, NULL, NULL);
if (r == -1) {
perror("openpty");
exit(1);
}
pid = fork();
if (pid == 0) {
/* child */
setsid();
close(master);
dup2(slave, 0);
dup2(slave, 1);
dup2(slave, 2);
close(slave);
write(1, "testing", 7);
_exit(255);
} else {
/* parent */
char buf[1024];
usleep(500000); /* 0.5 */
close(slave);
r = read(master, buf, 1024);
if (r == -1) {
perror("read");
exit(1);
}
printf("%d\n", r);
write(1, buf, r);
kill(pid, SIGKILL);
}
} |
|
Date |
User |
Action |
Args |
2019-07-14 13:56:29 | ronaldoussoren | set | recipients:
+ ronaldoussoren, loewis, ned.deily, amoffat |
2019-07-14 13:56:29 | ronaldoussoren | set | messageid: <1563112589.32.0.0147013788102.issue15898@roundup.psfhosted.org> |
2019-07-14 13:56:29 | ronaldoussoren | link | issue15898 messages |
2019-07-14 13:56:28 | ronaldoussoren | create | |
|