Austin Group Defect Tracker

Aardvark Mark IV


Viewing Issue Simple Details Jump to Notes ] Issue History ] Print ]
ID Category Severity Type Date Submitted Last Update
0000236 [1003.1(2008)/Issue 7] Shell and Utilities Comment Omission 2010-04-01 09:34 2010-05-06 15:12
Reporter geoffclare View Status public  
Assigned To ajosey
Priority normal Resolution Rejected  
Status Resolved  
Name Geoff Clare
Organization The Open Group
User Reference
Section sh
Page Number 3177
Line Number 105795
Interp Status ---
Final Accepted Text
Summary 0000236: additional sh -c example that uses exec
Description It would be useful to show an example of sh -c that uses exec
to avoid an extra process.
Desired Action After example 1 insert a new example 2:
    2. As example 1, but with the shell being replaced by cat instead
       of creating a new process for cat:

       sh -c "exec cat myfile"

Renumber the current example 2 to be 3.
Tags No tags attached.
Attached Files

- Relationships

-  Notes
(0000414)
msbrown (manager)
2010-05-06 15:12

David Korn notes:
This is historical practice and a rather important optimization.
The system(string) function invokes sh -c string and is often
called with a string that is just a simple command. The performace
would be impaired if this caused two forks() rather than just one.

However, there are many circumstances where the optimization should
not be allowed since it would affect the behavior of a script.
For example, if the user has set a trap on EXIT, the last command
cannot exec since this would prevent the trap from taking place.


Note, that the script writer can always prevent the optimization by
adding
         exit $?
to the end of the script.

With at least ksh88 and ksh93 (and I suspect others),
         sh -c 'exec cat myfile'
will not save a process since the shell will recognized that this is
the last process and then exec cat without forking.

Moreover, if cat is implemented as a builtin, it will be slower
than
         sh -c 'cat myfile'

In fact, I am unaware of any case where exec will save a process
creation. If I could think of one, I would look at how to
detect this without exec.

- Issue History
Date Modified Username Field Change
2010-04-01 09:34 geoffclare New Issue
2010-04-01 09:34 geoffclare Status New => Under Review
2010-04-01 09:34 geoffclare Assigned To => ajosey
2010-04-01 09:34 geoffclare Name => Geoff Clare
2010-04-01 09:34 geoffclare Organization => The Open Group
2010-04-01 09:34 geoffclare Section => sh
2010-04-01 09:34 geoffclare Page Number => 3177
2010-04-01 09:34 geoffclare Line Number => 105795
2010-04-01 09:34 geoffclare Interp Status => ---
2010-05-06 15:12 msbrown Note Added: 0000414
2010-05-06 15:12 msbrown Status Under Review => Resolved
2010-05-06 15:12 msbrown Resolution Open => Rejected


Mantis 1.1.6[^]
Copyright © 2000 - 2008 Mantis Group
Powered by Mantis Bugtracker