[comp.os.minix] job control is a bug, not a feature

henry@utzoo.uucp (Henry Spencer) (06/08/89)

In article <8167@boring.cwi.nl> roberto@cwi.nl (Rob ten Kroode) writes:
>I asked Andy some advise, and he told me that he didn't like the idea of 
>job control in Minix...

Job control is a stupid, poorly-thought-out, ass-backwards excuse for a
window system.  It's mostly just a way of interacting with multiple
processes.  Window systems do it much better, since they provide central
control of output as well as input, and if done well, it is transparent
to user programs (instead of requiring ugly hacks in each and every one).

No, you do not need a bitmapped display to do a window system.

One of my bigger regrets is that after Ian Darwin and I succeeded in
getting job control excluded from the /usr/group Unix interface standard,
I got busy with other things and didn't keep a sharp eye on POSIX (which
started from the /usr/group standard)... and job control, slimy tentacles
and all, slithered back in when I wasn't watching.

If anyone is interested, I think I still have the scathing commentary on
job control that Ian and I did at the time.
-- 
You *can* understand sendmail, |     Henry Spencer at U of Toronto Zoology
but it's not worth it. -Collyer| uunet!attcan!utzoo!henry henry@zoo.toronto.edu

tim@crackle.amd.com (Tim Olson) (06/08/89)

In article <1989Jun7.224933.700@utzoo.uucp> henry@utzoo.uucp (Henry Spencer) writes:
| In article <8167@boring.cwi.nl> roberto@cwi.nl (Rob ten Kroode) writes:
| >I asked Andy some advise, and he told me that he didn't like the idea of 
| >job control in Minix...
| 
| Job control is a stupid, poorly-thought-out, ass-backwards excuse for a
| window system.  It's mostly just a way of interacting with multiple
| processes.  Window systems do it much better, since they provide central
| control of output as well as input, and if done well, it is transparent
| to user programs (instead of requiring ugly hacks in each and every one).

In a related question, has anyone else worked on "virtual terminal"
support for the console?  By this, I mean the ability to have multiple
simultaneous sessions, and the ability to flip between them with a
"hot-key", like F3.  I have seen this in other systems, and thought it
would be an interesting thing to add.

I'm not quite finished with it, but it appears to drop in very easily to
tty.c, at least on the PC version of MINIX.



	-- Tim Olson
	Advanced Micro Devices
	(tim@amd.com)

jds@mimsy.UUCP (James da Silva) (06/08/89)

In article <1989Jun7.224933.700@utzoo.uucp> henry@utzoo.uucp (Henry Spencer) writes:
>Job control is a stupid, poorly-thought-out, ass-backwards excuse for a
>window system.  It's mostly just a way of interacting with multiple
>processes.  Window systems do it much better, since they provide central
>control of output as well as input, and if done well, it is transparent
>to user programs (instead of requiring ugly hacks in each and every one).

Interesting.  I often find myself using job control to stop a process
without killing it.  Or doing simple things like putting ftp,
compress, or rm into the background when they are taking longer than
expected.  How does your alternative handle things like these?  Do I
have to explicitly run each command in a separate window?

>No, you do not need a bitmapped display to do a window system.

Granted.  Do you need a fast terminal?  How do I do windows at 2400
baud without spending all my time redrawing the screen, or dividing
its 25x80 chars into tiny `windows'?

>If anyone is interested, I think I still have the scathing commentary on
>job control that Ian and I did at the time.

I'm interested.  I think you should post to comp.os.minix; Minix is
about learning OS design tradeoffs, after all.

Jaime
...........................................................................
: domain: jds@mimsy.umd.edu				     James da Silva
: path:   uunet!mimsy!jds

henry@utzoo.uucp (Henry Spencer) (06/09/89)

In article <1989Jun7.224933.700@utzoo.uucp> I wrote:
>If anyone is interested, I think I still have the scathing commentary on
>job control that Ian and I did at the time.

I'm already getting a steady stream of requests for this, so here it is.
If I were formally submitting it today I'd probably make some small changes,
but I don't have time for that now (so bear in mind that it's old).  Also,
I have not consulted Ian about this and cannot say whether his views have
changed or not.

----------
.TL
Comments on Terminal I/O, Specifically `Job Control'
.AU
Henry Spencer
.AI
University of Toronto
utzoo!henry
.AU
Ian Darwin
.AI
University of Toronto
.SH
`Job Control', What It's Really About
.PP
There is no longer any argument that it is desirable to permit orderly
user interaction with multiple processes.
Unfortunately, a whole generation of Unix users has had their view of
this concept warped by the dreadful way it was implemented by Berkeley.
And AT&T, in its recent attempt to address the problem, has taken the
easy way out instead of doing it right.
.PP
The basic concept involved here is multiplexing, not `job control' or
process suspension.
The ideal is something like the environment on the Bell Labs Blit,
where multiple processes run simultaneously in multiple windows,
and the user can switch
his attention and his interaction from one to another at will.
There is a popular misconception that doing this \fIrequires\fR a
Blit or a similar highly-intelligent terminal;
this is simply not true.
.PP
Window-based multiplexed interaction
is harder to do when the terminal is dumb, but even the Blit is not
actually writing things into several windows \fIsimultaneously\fR:
it just looks that way because of the high-speed multiplexing involved.
There is no intrinsic reason why this multiplexing cannot be done at
the other end of the communications line when the terminal is incapable
of doing it.
.PP
The multiplexing can be done in the kernel (albeit at considerable cost
in added kernel complexity) or in a user process (given suitable
interprocess communication).
In either case, the fundamental structure is quite simple:  a central
`manager' coordinates terminal i/o to and from `client' processes,
each of which has total control of its own "virtual terminal".
The manager's job is simulating multiple virtual terminals on a single
real terminal,
by routing input to the appropriate process
and placing output in the appropriate area of the screen.
.PP
The basic characteristics of such a multiplexing system are that each
process has what looks (to it) like a private terminal, and that all
i/o to and from the user is centrally supervised.
This is precisely analogous to file i/o under Unix:
simultaneous independent activity by multiple processes,
coordinated by a central manager
which multiplexes physical resources so as to prevent interference.
The benefits are similar:
individual processes neither know nor care about the multiplexing,
and useful high-level abstractions can be implemented in one
central place.
.SH
Job Control and Layers:  Half-Baked Approaches
.PP
The existing schemes, Berkeley `job control' and AT&T `layers',
unfortunately are clumsy and incomplete attempts at implementing
multiplexed interaction.
Neither one makes any provision for simultaneous on-screen activities
by more than one process, except for the `cop-out' of permitting
multiple processes to intermix their output at random.
But there are deeper problems.
.PP
Both schemes require that \fIevery\fR \fIprogram\fR which is going
to participate in multiplexed interaction must contain code to allow for
this possibility!
User programs must be prepared to redraw the screen on request,
with the requests coming from the kernel in the Berkeley scheme and
from the user in the System V.2 scheme.
This is an abomination.
.PP
Not only does this demand specialized code in every user program, but
it entirely denies multiplexed interaction to the bulk of Unix programs.
The concept of `redraw the screen' is meaningful only for interactive
programs with full-screen interfaces.
The result of, say, an \fIegrep\fR, once replaced on-screen by (say)
the editing buffer of a \fIvi\fR, is gone for good.
Since \fIegrep\fR is not an interactive program, it is no longer around
to be asked to redraw its output.
.PP
The heart of the problem is that
neither job control nor layers implements the crucial half of a window system:
centralized management of screen updates.
It has long been accepted that multiple processes cannot safely do
updates to disks without centralized management and consistency
control.
The same obviously
applies to terminal i/o:
orderly simultaneous interaction with multiple processes requires
centralized supervision of the interaction.
The existing schemes supervise input but not output.
.PP
It is obvious \fIwhy\fR this deficiency exists:  supervising output is
the hard part.
The idea of switching input from one program to another is reasonably
straightforward.
Differences in input handling, such as `cooked' vs. `raw' modes, are
relatively minor problems,
since the user can be conversing with at most one process at a time.
But a CRT terminal permits output from multiple processes to be displayed
simultaneously, and coordinating screen updates isn't trivial.
Furthermore, there is no agreement on the precise user interface that
should be presented for output \(em consider, for example, the religious
debates over overlapping vs. non-overlapping windows \(em and this
discourages attempts to provide a single and relatively inflexible
central solution.
The immense variation in CRT-terminal control sequences puts the icing
on the cake.
.PP
Nevertheless, these problems \fIcan\fR be solved.
There are at least three, and probably several more,
complete window systems in experimental use.
Some of them have performance problems, and most of them are outside the
kernel and hence have interprocess-communication problems, but they do work.
.SH
Standardizing Multiplexed Interaction:  A Recommendation
.PP
As mentioned above, several experimental window systems already exist.
(This is quite apart from the `real' window systems on bitmapped
workstations, which are also relevant.)
Experience with these and other implementations of the same concept
will yield a wealth of knowledge on how best to handle this function.
It is important that this experimentation,
and the adoption of the results that come out of it,
not be stifled by further
`official endorsement' of incomplete and badly-designed existing schemes.
.PP
The best approach for /usr/group to take on this matter would be to
reserve some characters, and some flag bits, for implementations of
multiplexed user interfaces,
but not to specify any such interface at this time.
Such an attempt to specify the interface would be premature,
especially when the two approaches under consideration are already
known to be grossly-incomplete botches.
.PP
\fINeither Berkeley `job control' nor AT&T `layers' is an adequate
implementation of a multiplexed user interface.
Neither one should be cast in concrete as a standard at this time.\fR
.SH
A Retraction
.PP
Our previous recommendation was that, if multiplexed interaction \fImust\fR
be standardized, AT&T `layers' would be a better place to start.
The layers system, unlike Berkeley job control, does do input multiplexing
more-or-less correctly, and hence is essentially upward-compatible with
true window systems.
It has several desirable characteristics:
independent tty state for each layer,
suspension/resumption invisible to the processes,
a central manager process which is \fInot\fR imbedded in a shell,
and an implementation that does not have ramifications everywhere.
.PP
Nevertheless, as discussed above,
it doesn't do the hard part:  output multiplexing.
It also has some annoying implementation limits, which,
although they wouldn't
necessarily have to propagate into a standard,
might well propagate into most early implementations.
Its major problem is that it's not clear how to extend it to
centralized output management without imbedding said management inside
the kernel.
.PP
We therefore retract our recommendation for standardizing layers as a
second choice.
The proper course is to standardize nothing,
at least until we understand the user-interface issues
and the implementation problems
better.
.SH
Specifics
.PP
A decision not to standardize a multiplexed-interaction scheme
notwithstanding, there are a few useful minor things that can be
standardized.
The \fItermio\fR structure probably should have a reserved character
or two (or room for same) and a few reserved bits (or room for same)
to permit kernel-based implementations of multiplexing.
.PP
In particular, almost any multiplexing scheme using ordinary ASCII
terminals will need a special character to attract the attention of
the multiplexing software.
Without this, it's very difficult to do things like moving between
windows.
Reserving space for such a character might be useful; recommending a
default choice for the character would be very valuable, as it would
forestall unnecessary differences between implementations.
Control-Z would be plausible.
.PP
Implementing supervision of multiplexed interaction in user processes
is difficult in many existing Unix implementations, minimal
implementations of the existing /usr/group standard among them.
The basic problem is that normal user processes are definitely aware
that their output is going to a terminal,
the device-independence of
Unix i/o
notwithstanding.
Screen-oriented programs doing \fIioctl\fRs are the biggest problem.
A less obvious glitch is that \fIstdio\fR adjusts its buffering
strategy depending on whether output is to a terminal or not;
this is a major nuisance with some existing window systems.
Something like the `pseudo-tty' concept would be very useful:  an entity
which looks like a terminal from one side,
but whose behavior is under user-process control from the other side.
Some existing systems do implement such things, but the
lack of standardization largely prevents use of them in portable programs.
.SH
Suspending Processes:  A Non-Issue
.PP
Several people have objected to AT&T layers, and similar approaches,
on the grounds that `...but 4BSD lets me suspend misbehaving processes...'.
This is silly; a process-suspension facility can be very simple
if it isn't required to double as a multiplexing system.
.PP
If it is thought desirable to standardize process suspension, we would
suggest the following.
Some magic character (control-Y?), when typed as input to a tty/window,
suspends all processes attached to that tty/window.
The suspension can be, and should be, utterly invisible to the processes
involved.
This avoids the sticky problem of how to notify the processes without
doing incompatible things to the \fIsignal\fR mechanism.
The suspension probably should have a permission requirement analogous
to that of signals:  if the effective userids of the user and the process
don't match, the suspension doesn't happen.
This is necessary to prevent major security breaches like suspending
\fIpasswd\fR(1) in the middle of an update to the password file.
.PP
Note that this suspension facility isn't very useful in the absence
of multiplexed interaction \(em you can't \fIdo\fR anything to a
suspended process without access to another (real or virtual) terminal \(em
but the two concepts are nevertheless quite independent.
There is no need to confuse them.
.SH
Miscellaneous Comments
.PP
Departing from multiplexed interaction, we'd like to raise again a
couple of minor issues mentioned in the previous paper...
.PP
An ignored hangup signal should not only cause reads to return
end-of-file,
it should also cause writes to be no-ops.
Hangup should, in general, disconnect lingering processes from the
terminal completely,
so they don't hang around to bedevil the next user.
.PP
One extremely useful feature that is missing is terminal pagination.
To quote Rob Pike:  ``terminals should not scroll [without
the user's permission]''.
Many people think this a useless frill, but they almost invariably
are people who have never tried it.
Most people who try it seriously, love it.
Even the simplest and crudest implementations (such as the one on the
system this document is being written on) are major improvements on
a terminal interface that lacks this feature.
This is not a new and unknown idea:  it has been conceived and implemented
independently at least three times, has been in use for years, and is
generally perceived by its users as a big win.
----------
-- 
You *can* understand sendmail, |     Henry Spencer at U of Toronto Zoology
but it's not worth it. -Collyer| uunet!attcan!utzoo!henry henry@zoo.toronto.edu

oz@yunexus.UUCP (Ozan Yigit) (06/09/89)

Part of a summary paragraph of some thoughts from DMR regarding
Job Control (net.unix.wizards: 12 apr 86): [I do not have the whole
article on line anymore]

> My impression is that BSD job control is something that was
> put in by expedient means in order to achieve a certain effect, and the
> effect is excellent, within the serious limitations of the mechanism.
> SV job control was done with a cleaner conceptual foundation, but with
> a less lucid view of what it is for, and less effort devoted to making
> it useful. Indeed, I suspect it is not much used.

oz
-- 
SomeOS4.n: Brooks was right all	        Usenet:    oz@nexus.yorku.ca
along, but it shouldn't take so         ......!uunet!utai!yunexus!oz
large a pie in a face to figure	        Bitnet: oz@[yulibra|yuyetti]
it out..                  anon.         Phonet: +1 416 736-5257x3976

dhesi@bsu-cs.bsu.edu (Rahul Dhesi) (06/09/89)

Henry Spencer's article contains some explicit and implicit assumptions
that I will counter briefly:

1.   Job control versus multiple windows is a false dichotomy.
2.   Each and every program does not need special code to deal with
     job control.  Only programs that change terminal settings,
     and privileged programs that should not be interrupted by
     unprivileged users, need such code.
3.   Multiple windows are useless at 1200 bps.
4.   Multiple windows are useless on a hardcopy terminal.

The best solution is to allow multiple windows, and job control within
each.  This lets the user decide which to use:  multiple windows only,
or job control only, or a combination of both.
-- 
Rahul Dhesi <dhesi@bsu-cs.bsu.edu>
UUCP:    ...!{iuvax,pur-ee}!bsu-cs!dhesi
Career change search is on -- ask me for my resume

jca@pnet01.cts.com (John C. Archambeau) (06/09/89)

I don't understand your prejudice against job control.  If you mean job
control via the csh and BSD UNIX then arguing that it isn't any good is like a
two year old arguing over what his favorite flavor of ice cream is.  Whether
or not you want job control and the csh in Minix is your business, but there
are some of us who do.  I hate SysV Unix because of its lack of job control,
there are times when I want to do a ^Z and suspend a job just to find out what
the (*bleep*) is going on with the rest of the system, then I go put it in the
background or do something else.  Job control is a nice feature of the user
controlling his/her processes and since enough of us here are fond of BSD
Unix, it's obviously a well used feature of the csh.
 
 /*--------------------------------------------------------------------------*
  * That's not an operating system, this is an operating system!
  *--------------------------------------------------------------------------*
  * UUCP: {nosc ucsd hplabs!hp-sdd}!crash!pnet01!jca
  * APRA: crash!pnet01!jca@nosc.mil
  * INET: jca@pnet01.cts.com
  *--------------------------------------------------------------------------*/
  
#include <disclaimer.h>

poage@sunny.ucdavis.edu (Tom Poage) (06/10/89)

I get the impression that a number of people dislike csh, but
have a hard time getting along without job control.
Anyone care to take a crack at writing an AT&T-free ksh?  :-) Tom.

henry@utzoo.uucp (Henry Spencer) (06/10/89)

In article <17958@mimsy.UUCP> jds@mimsy.umd.edu (James da Silva) writes:
>Interesting.  I often find myself using job control to stop a process
>without killing it.  Or doing simple things like putting ftp,
>compress, or rm into the background when they are taking longer than
>expected.  How does your alternative handle things like these?  Do I
>have to explicitly run each command in a separate window?

No, just shift to a fresh window when -- and only when -- the one you're
running in is taking too long to finish.

>Granted.  Do you need a fast terminal?  How do I do windows at 2400
>baud without spending all my time redrawing the screen, or dividing
>its 25x80 chars into tiny `windows'?

At low speeds, typically the best way to organize windows is to make them
the size of the screen and have only one showing at a time.  There is no
need for screen redrawing to involve any more characters than sending
stuff to the screen in the ordinary way, unless the window manager is
stupid.
-- 
You *can* understand sendmail, |     Henry Spencer at U of Toronto Zoology
but it's not worth it. -Collyer| uunet!attcan!utzoo!henry henry@zoo.toronto.edu

henry@utzoo.uucp (Henry Spencer) (06/10/89)

In article <7652@bsu-cs.bsu.edu> dhesi@bsu-cs.bsu.edu (Rahul Dhesi) writes:
>1.   Job control versus multiple windows is a false dichotomy.

Please elaborate; looks like a real one to me.

>2.   Each and every program does not need special code to deal with
>     job control.  Only programs that change terminal settings,
>     and privileged programs that should not be interrupted by
>     unprivileged users, need such code.

And any program for which there is any likelihood that its output might
have to be redrawn.  That is, every program.

>3.   Multiple windows are useless at 1200 bps.

Then don't put more than one on the screen at a time.  The others are still
accessible if needed.

>4.   Multiple windows are useless on a hardcopy terminal.

True.  How many people work on hardcopy terminals?

>The best solution is to allow multiple windows, and job control within
>each...

Why provide two ways of doing the same thing?  See Ken Thompson in the
original Unix papers on the virtues of doing things only one way.
-- 
You *can* understand sendmail, |     Henry Spencer at U of Toronto Zoology
but it's not worth it. -Collyer| uunet!attcan!utzoo!henry henry@zoo.toronto.edu

chasm@killer.DALLAS.TX.US (Charles Marslett) (06/10/89)

In article <1989Jun10.063315.26085@utzoo.uucp>, henry@utzoo.uucp (Henry Spencer) writes:
> >the best solution is to allow multiple windows, and job control within
> >each...
>
> Why provide two ways of doing the same thing?  See Ken Thompson in the
> original Unix papers on the virtues of doing things only one way.

What this all boils down to, I think, is that a window manager has to do
all the things job control does, and some even allow programs written with
no knowledge of the window manager's operation to run.  Job control on the
other hand, is a subset of the window manager's functionality, so it must
be either replaced (as I understand the normal scheme of things handles it)
or the duplicate functions trip all over each other when you add a windowing
scheme.

The primary issue I would like to raise is how much of a performance hit do
you get by adding the window manager to the screen output/keyboard input path
over having the simpler job control scheme.  I do not mean X11 or whatever, just
an OS/2 style monitor to map I/O to various "logical windows".  Has anyone
ever done this?

> -- 
> You *can* understand sendmail, |     Henry Spencer at U of Toronto Zoology
> but it's not worth it. -Collyer| uunet!attcan!utzoo!henry henry@zoo.toronto.edu

Charles Marslett
chasm@killer.dallas.tx.us

dhesi@bsu-cs.bsu.edu (Rahul Dhesi) (06/11/89)

Countering Henry Spencer's response to my article:

Job control versus multiple windows is a false dichotomy because one
does not exclude the other.

>>2.   Each and every program does not need special code to deal with
>>     job control.  Only programs that change terminal settings,
>>     and privileged programs that should not be interrupted by
>>     unprivileged users, need such code.
>
>And any program for which there is any likelihood that its output might
>have to be redrawn.  That is, every program.

No.  If a program produces strictly sequential output, you only need to
redraw it if it has scrolled off your screen or been overwritten by the
output from some other screen-oriented program.  But this is not caused
by job control, so job control should not be blamed for it.

If you want all output from a program to be always accessible, you need
a virtual screen much bigger than your physical screen.  Multiple
windows are neither necessary nor sufficient to give you that.

>>3.   Multiple windows are useless at 1200 bps.
>
>Then don't put more than one on the screen at a time.  The others are still
>accessible if needed.

It takes too long to redraw the screen at 1200 bps.  Switching between
windows is painful at less then 9600 bps, and even at 9600 bps it is an
inconvenience.

>>4.   Multiple windows are useless on a hardcopy terminal.
>
>True.  How many people work on hardcopy terminals?

I don't know.  I occasionally do when I need a record of what I did.
How do you make a log of everything you did in a terminal session in
order while still using multiple windows?

Re job control + windows:
>Why provide two ways of doing the same thing?

One of them doesn't work well under certain circumstances, such as 1200
bps, and the other doesn't let you flexibly handle concurrent jobs that
produce output to the screen.  If you value both situations you need
both job control and multiple windows.

For jobs that expect no input from the terminal, I find it most
convenient to redirect all output to a log file.   This effectively
gives me a much bigger window into the output than any conventional
windowing scheme would.  And at any time I can do "tail -f logfile" and
see the output in real time, and I can even suspend *this* job (running
tail) and resume it later if I wish.

If we all had high-speed links (at least 19.2 kbps), and big terminals
(perhaps 100 characters by 100 lines), multiple windows might be the
perfect replacement for job control.  Perhaps in 1995 or so Henry
Spencer's claims will be indisputable.
-- 
Rahul Dhesi <dhesi@bsu-cs.bsu.edu>
UUCP:    ...!{iuvax,pur-ee}!bsu-cs!dhesi
Career change search is on -- ask me for my resume

ncoverby@ndsuvax.UUCP (Glen Overby) (06/12/89)

In article <393@sunny.ucdavis.edu> poage@sunny.ucdavis.edu (Tom Poage) writes:
>Anyone care to take a crack at writing an AT&T-free ksh?  :-) Tom.

Somebody already has.  You can FTP it from urth.cc.buffalo.edu.  We've tried
compiling it on a 4.3BSD VAX, and it doesn't.
-- 
		Glen Overby	<ncoverby@plains.nodak.edu>
	uunet!ndsuvax!ncoverby (UUCP)	ncoverby@ndsuvax (Bitnet)

chet@kiwi.CWRU.EDU (Chet Ramey) (06/12/89)

In article <393@sunny.ucdavis.edu> poage@sunny.ucdavis.edu (Tom Poage) writes:
>I get the impression that a number of people dislike csh, but
>have a hard time getting along without job control.

I'm one.  I use job control and windows all the time.

>Anyone care to take a crack at writing an AT&T-free ksh?  :-) Tom.

It's being done, and in more than one place.

Brian Fox, with a little help from the masses (again, I'm one :-), has just
released version 0.99 of bash, the Bourne-Again SHell.  This is the GNU
project's Bourne+ Shell.  It has the job control, command-line editing,
tilde expansion, etc.  that ksh provides in addition to bourne shell
compatibility.  It's really a good shell, already an implementation of the
current POSIX shell specification (part of the output of 1003.2), and I
expect it to pick up more ksh features as time goes on.  The first I'm
expecting is expression evaluation (the (( )) stuff). 

Eric Geisen, at the University of Waterloo, is working on a PD ksh, with full
compatibility as its goal.  I picked up an old version from Toronto (don't 
even try -- they restricted FTP access to it soon after it was announced as
available).  This version had emacs-style editing, job control (both picked
up from the BRL s5r2 shell), nearly full s5r2 sh compatibility, and other
goodies.  I'm sure it's being worked on as well, but no version of it is 
currently available from either Waterloo or Toronto, and Eric has not been
very good about answering mail about availability.


Chet Ramey     Network Services Group, CWRU    chet@cwjcc.INS.CWRU.Edu

	"Unix System V:  From now on, consider it sub-standard"





Chet Ramey     Network Services Group, CWRU    chet@{cwjcc,pirate}.INS.CWRU.Edu

"The flagon with the dragon has the potion with the poison;
	the vessel with the pestle holds the brew that is true!"

charles@hpcvca.CV.HP.COM (Charles Brown) (06/13/89)

>>> the best solution is to allow multiple windows, and job control within
>>> each...
>> Why provide two ways of doing the same thing?  See Ken Thompson in the
>> original Unix papers on the virtues of doing things only one way.
>>      Henry Spencer at U of Toronto Zoology
>What this all boils down to, I think, is that a window manager has to do
>all the things job control does, and some even allow programs written with
>no knowledge of the window manager's operation to run.  Job control on the
>other hand, is a subset of the window manager's functionality, so it must
>be either replaced (as I understand the normal scheme of things handles it)
>or the duplicate functions trip all over each other when you add a windowing
>scheme.
>	Charles Marslett

I have not seen a window manager which provides *suspend*.

I occasionally have large simulations which spend several days
running, during which time they spend lots of time swapping portions
to disk.  The task already is in the background.  I want to be able to
suspend it so it does not slow me down in my daytime tasks (by always
swapping my foreground tasks to disk be cause I stopped typing for a
second).  Then each evening before I leave I can restart the
simulation and let it swap away all it wants.

Windows do NOT replace job control.
--
	Charles Brown	charles@cv.hp.com or charles%hpcvca@hplabs.hp.com
			or hplabs!hpcvca!charles or "Hey you!"
	Not representing my employer.
	"The guy sure looks like plant food to me." Little Shop of Horrors

allbery@ncoast.ORG (Brandon S. Allbery) (06/13/89)

As quoted from <17958@mimsy.UUCP> by jds@mimsy.UUCP (James da Silva):
+---------------
| In article <1989Jun7.224933.700@utzoo.uucp> henry@utzoo.uucp (Henry Spencer) writes:
| >Job control is a stupid, poorly-thought-out, ass-backwards excuse for a
| >window system.
| 
| Interesting.  I often find myself using job control to stop a process
| without killing it.  Or doing simple things like putting ftp,
| compress, or rm into the background when they are taking longer than
| expected.  How does your alternative handle things like these?  Do I
| have to explicitly run each command in a separate window?
+---------------

I use JSB Multiview at work; if I need to kill a process or want to switch
something into the "background", I just pop up the Multiview menu and select
or open another window to work in.  -> If you can't manipulate windows
dynamically, it's a p*ss-poor window system.

+---------------
| >No, you do not need a bitmapped display to do a window system.
| 
| Granted.  Do you need a fast terminal?  How do I do windows at 2400
| baud without spending all my time redrawing the screen, or dividing
| its 25x80 chars into tiny `windows'?
+---------------

"Window system" does not necessarily imply multiple on-screen windows.
I use Multiview with 80x25 (status line on our terminals is also windowed!)
-- and BSD comes with a critter called "screen" which does the same thing,
80x25 "windows".  With this setup, it costs little more (only pty overhead)
to run windows as not -- I also use MultiView over the modem, although not
often because it has a rather brain-damaged way of dealing with insert/delete
multiple lines (ANSI ESC [ nnn L, et alia).

+---------------
| >If anyone is interested, I think I still have the scathing commentary on
| >job control that Ian and I did at the time.
| 
| I'm interested.  I think you should post to comp.os.minix; Minix is
| about learning OS design tradeoffs, after all.
+---------------

Seconded.  Although you might cross-post to comp.unix.wizards, assuming you
want to start a flame war ;-)

++Brandon
-- 
Brandon S. Allbery, moderator of comp.sources.misc	     allbery@ncoast.org
uunet!hal.cwru.edu!ncoast!allbery		    ncoast!allbery@hal.cwru.edu
      Send comp.sources.misc submissions to comp-sources-misc@<backbone>
NCoast Public Access UN*X - (216) 781-6201, 300/1200/2400 baud, login: makeuser

mfuller@prandtl.nas.nasa.gov (Mike J. Fuller) (06/16/89)

In article <5870009@hpcvca.CV.HP.COM> charles@hpcvca.CV.HP.COM (Charles Brown) writes:
[Lots of stuff deleted...]
>Windows do NOT replace job control.

Ditto.  At the moment, I'm working on sun 4/260 and I can start up
lots of windows plenty quick, but I still use job control within my
windows frequently.
/---------------------------------------------------------------------------\
| Mike J. Fuller |Internet: mfuller@prandtl.nas.nasa.gov|You'd be paranoid, |
|----------------|          mikef@vax1.cc.uakron.edu    |too, if everyone   |
|/\/\/\/\/\/\/\/\|Bitnet:   r3mjf1@akronvm              |was out to get you!|
\---------------------------------------------------------------------------/

mfuller@prandtl.nas.nasa.gov (Mike J. Fuller) (06/16/89)

In article <8336@killer.DALLAS.TX.US> chasm@killer.DALLAS.TX.US (Charles Marslett) writes:
>In article <1989Jun10.063315.26085@utzoo.uucp>, henry@utzoo.uucp (Henry Spencer) writes:
[Lots of stuff deleted...]
>The primary issue I would like to raise is how much of a performance hit do
>you get by adding the window manager to the screen output/keyboard input path
>over having the simpler job control scheme.  I do not mean X11 or whatever, just
>an OS/2 style monitor to map I/O to various "logical windows".  Has anyone
>ever done this?

To a certain extent, yes.  A long time ago, I built a program called
"screen" on our suns here.  I can't remember where I got it, but it
does exist and work on machines with BSD support.  It's README file
begins:

"screen" is a window manager that allows you to handle several
independent screens (UNIX ttys) on a single physical terminal; each
screen has its own set of processes connected to it (typically
interactive shells).

Incidently, I rarely use screen because _I_ have job control.  :-)  I
only built it because there is no way to escape from and suspend a
decnet login like a telnet or rlogin (sun's dni software s*cks), and
that is rather frusterating when you're logged in from a 80x24
terminal.  Also, on PC's, NCSA telnet provides a similar "window"
system.  It is rather nice and fast.

/---------------------------------------------------------------------------\
| Mike J. Fuller |Internet: mfuller@prandtl.nas.nasa.gov|You'd be paranoid, |
|----------------|          mikef@vax1.cc.uakron.edu    |too, if everyone   |
|/\/\/\/\/\/\/\/\|Bitnet:   r3mjf1@akronvm              |was out to get you!|
\---------------------------------------------------------------------------/

preston@felix.UUCP (Preston Bannister) (06/17/89)

From article <1989Jun10.063047.26030@utzoo.uucp>, by henry@utzoo.uucp (Henry Spencer):
> In article <17958@mimsy.UUCP> jds@mimsy.umd.edu (James da Silva) writes:
>>Interesting.  I often find myself using job control to stop a process
>>without killing it.  Or doing simple things like putting ftp,
>>compress, or rm into the background when they are taking longer than
>>expected.  How does your alternative handle things like these?  Do I
>>have to explicitly run each command in a separate window?
> 
> No, just shift to a fresh window when -- and only when -- the one you're
> running in is taking too long to finish.

I partly disagree.  Sometimes I'll shift to a fresh window and let the
command run.  At other times (usually when there is some state
associated with the current window) it is more efficient suspend and
background the (long running) command.

>>Granted.  Do you need a fast terminal?  How do I do windows at 2400
>>baud without spending all my time redrawing the screen, or dividing
>>its 25x80 chars into tiny `windows'?
> 
> At low speeds, typically the best way to organize windows is to make them
> the size of the screen and have only one showing at a time.  There is no
> need for screen redrawing to involve any more characters than sending
> stuff to the screen in the ordinary way, unless the window manager is
> stupid.

The answer to this question depends on how your "windows" are
implemented.

When I dial into work from home, I usually run a version of UW ("Unix
Windows").  UW provides multiple simulated terminals (each "terminal"
screen in it's own window) with only a single serial connection to the
host machine.

I find that 2400 baud is _much_ more livable using UW as my local
(home) machine does all repaints from it's internal representation of
the "screen" in each window.
---
Preston L. Bannister
USENET	   :	{hplabs,oliveb,spsd,zardoz}!felix!preston
BIX	   :	plb
CompuServe :	71350,3505
GEnie      :	p.bannister
--
Preston L. Bannister
USENET	   :	{hplabs,oliveb,spsd,zardoz}!felix!preston
BIX	   :	plb
CompuServe :	71350,3505
GEnie      :	p.bannister

henry@utzoo.uucp (Henry Spencer) (06/20/89)

In article <7687@bsu-cs.bsu.edu> dhesi@bsu-cs.bsu.edu (Rahul Dhesi) writes:
>Job control versus multiple windows is a false dichotomy because one
>does not exclude the other.

They merely duplicate each other.

>... If a program produces strictly sequential output, you only need to
>redraw it if it has scrolled off your screen or been overwritten by the
>output from some other screen-oriented program.  But this is not caused
>by job control, so job control should not be blamed for it.

Job control can quite fairly be blamed for failing to solve it, however.

>How do you make a log of everything you did in a terminal session in
>order while still using multiple windows?

How do you make such a log with ONE window if you're running screen-
oriented programs, like say a modern editor, whose i/o can't be logged
easily?  There just ain't no graceful way.
-- 
You *can* understand sendmail, |     Henry Spencer at U of Toronto Zoology
but it's not worth it. -Collyer| uunet!attcan!utzoo!henry henry@zoo.toronto.edu

scottw@ico.ISC.COM (Scott Wiesner) (06/20/89)

This is all just too much.  Job control with or without a windowing
system is a useful tool.  Just yesterday, I was doing a large build
on my system, when I decided I wanted to run a timing test on something
else.  If I had had job control, this would have been a simple matter
of doing a ^Z, running my test, and continuing the build.  Instead, 
I had to *kill* the build, run my test, and start a new build.  It's
just not the same.

Call it a bug or call it a feature.  I really don't care.  The point
is, a lot of us find it useful.  If you don't, fine, but don't tell
me I'm wrong for using it.

Scott Wiesner

henry@utzoo.uucp (Henry Spencer) (06/21/89)

In article <15868@vail.ICO.ISC.COM> scottw@ico.ISC.COM (Scott Wiesner) writes:
>This is all just too much.  Job control with or without a windowing
>system is a useful tool.  Just yesterday, I was doing a large build
>on my system, when I decided I wanted to run a timing test on something
>else.  If I had had job control, this would have been a simple matter
>of doing a ^Z, running my test, and continuing the build...

Nobody, including me -- please *read* my postings, especially the long
one -- is arguing that the ability to suspend jobs is not useful.  But
that is about 2% of job control.  The trouble comes when you stir that
together with screen updating and multiplexing, yielding a big mess.
-- 
NASA is to spaceflight as the  |     Henry Spencer at U of Toronto Zoology
US government is to freedom.   | uunet!attcan!utzoo!henry henry@zoo.toronto.edu

dhesi@bsu-cs.bsu.edu (Rahul Dhesi) (06/22/89)

In article <1989Jun21.165326.1650@utzoo.uucp> henry@utzoo.uucp (Henry Spencer)
writes:
>Nobody, including me -- please *read* my postings, especially the long
>one -- is arguing that the ability to suspend jobs is not useful.  But
>that is about 2% of job control.

Using csh under 4.3BSD, job control as seen by the user (not the kernel
implementor) is approximately

     50% suspending jobs
     50% resuming jobs

(This is a very rough approximation.  An argument could be made that
one should also include about 4% checking the status of jobs, 1%
posting Usenet articles about it, etc.)
-- 
Rahul Dhesi <dhesi@bsu-cs.bsu.edu>
UUCP:    ...!{iuvax,pur-ee}!bsu-cs!dhesi

henry@utzoo.uucp (Henry Spencer) (06/24/89)

In article <7881@bsu-cs.bsu.edu> dhesi@bsu-cs.bsu.edu (Rahul Dhesi) writes:
>>Nobody, including me -- please *read* my postings, especially the long
>>one -- is arguing that the ability to suspend jobs is not useful.  But
>>that is about 2% of job control.
>
>Using csh under 4.3BSD, job control as seen by the user (not the kernel
>implementor) is approximately	...

The kernel implementor, and the systems programmer in general, is what
I was talking about.
-- 
NASA is to spaceflight as the  |     Henry Spencer at U of Toronto Zoology
US government is to freedom.   | uunet!attcan!utzoo!henry henry@zoo.toronto.edu