[Toybox] [PATCH] Fix ps infinite loop on Android.
enh
enh at google.com
Fri Oct 23 08:35:16 PDT 2015
On Fri, Oct 23, 2015 at 8:05 AM, Rob Landley <rob at landley.net> wrote:
> On 10/21/2015 11:47 PM, enh wrote:
>> I pasted this into a thread "smack support" on 2015-09-19, but it
>> looks like it got lost.
>>
>> diff --git a/toys/pending/ps.c b/toys/pending/ps.c
>> index 29111d5..2bd7bcb 100644
>> --- a/toys/pending/ps.c
>> +++ b/toys/pending/ps.c
>> @@ -238,11 +238,12 @@ void ps_main(void)
>> TT.width--;
>>
>> // find controlling tty, falling back to /dev/tty if none
>> - for (i = fd = 0; i < 4; i++) {
>> + for (i = 0; i < 4; i++) {
>> struct stat st;
>>
>> - if (i != 3 || -1 != (i = fd = open("/dev/tty", O_RDONLY))) {
>> - if (isatty(i) && !fstat(i, &st)) {
>> + fd = i;
>> + if (i != 3 || -1 != (fd = open("/dev/tty", O_RDONLY))) {
>> + if (isatty(fd) && !fstat(fd, &st)) {
>> TT.tty = st.st_rdev;
>> break;
>>
>
> Infinite loop... If you haven't got a /dev/tty it would return -1 and
> reset the loop. Right. My fault, sorry. But a few lines down there's an
> if (fd!=-1) close(fd) that probably shouldn't trigger on stdin/out/err,
> so I still need to fix...
>
> Query: if you haven't got a controlling tty on stdin, stdout, stderr, or
> /dev/tty, what should the default behavior of ps _be_? In theory it
> lists processes attached to the current tty, but tty 0 is reserved
> (lanana.org says it's the null device, but not /dev/null because that's
> 1:3).
$ ssh localhost ps
PID TTY TIME CMD
1194 ? 00:05:44 chrome
3441 ? 00:00:00 gnome-keyring-d
3478 ? 00:00:04 init
3537 ? 00:00:01 ssh-agent
3651 ? 00:01:54 dbus-daemon
3660 ? 00:00:02 upstart-event-b
3665 ? 00:00:01 window-stack-br
3683 ? 00:00:35 upstart-dbus-br
...
> I guess with no tty, act like -A maybe? (That seems to be what toolbox
> ps did...)
>
> Hmmm, I installed a terminal on my phone and toolbox ps is going:
>
> USER PID PPID VSIZE RSS WCHAN PC NAME
>
> Except between C and NAME it's got "S" which I'm guessing is STAT elided
> from the title field for space. This doesn't quite map to the default,
> -l, or -f outputs, and "-o name" isn't recognized by psutils (I'm
> guessing cmd?)
>
> Lemme finish implementing the posix+obvious bits of psutils behavior
> before worrying about that...
yeah, i'm not even thinking about the Android-specific behaviors yet.
ps is probably the worst case, where the traditional Android behavior
is quite different from the traditional Unix behavior *and* it's
heavily used and makes some amount of sense for a system where
terminals aren't particularly meaningful (or even common).
> Rob
--
Elliott Hughes - http://who/enh - http://jessies.org/~enh/
Android native code/tools questions? Mail me/drop by/add me as a reviewer.
1445614516.0
More information about the Toybox
mailing list