Click Here - for a FREE MKS Toolkit Evaluation

Recent Articles

Gates Has Google's Back On Censorship
Like Google and Yahoo, Microsoft has had to adjust its business practices to suit Chinese government information control personnel, not that there's anything wrong with that.

Unix Server Market Melting Away

Hewlett Packard, Sun, and IBM used to own the high-end hardware, high-priced proprietary OS market; all three support open-source operating systems today and that could accelerate the market's continued shrinkage.

MySQL Network For SCO OpenServer 6
The SCO Group announced availability of the MySQL Network for SCO OpenServer 6 at the National Retail Federation Show on Monday. This will allow their customers and channel partners to benefit from high performance, low-cost, easy-to-manage solutions platform.

Unixart: Tracking Site Problems

As some of you know, I have Foo-web.com and some other sites on another web hosting site. Recently I noticed that I'd frequently get locked up for thirty seconds or so while editing files on that site...

Viruses and Unix
I was in a meeting last week where a customer was exploring switching from a Unix platform to Windows.

Windows vs. Unix - the Forgotten Facts (An Opinion)
"Windows Beat Unix, But It Won't Beat Linux" makes some valid points, but I think it leaves out one very important thing.

Lies and Statistics - the Unix Server Market
"There are three types of lies - lies, damn lies, and statistics." The source of that truth seems to be unknown, but it's sure on the mark for statistics reported in the Unix server market.

Microsoft Likes Unix?
The news from Microsoft is that they will be putting more Unix features into their server offerings according to...



Free Software Archive:
Enterprise and Home Networking Downloads

02.14.06


How Shells Call Other Programs

By A.P. Lawrence

An article about How Linux or UNIX Understand which program to run got picked up by a few dozen RSS feeds recently. It's not a bad article.

It's actually slightly incorrect though.

The implication is that the shell reads the command and decides what to do. It's actually the kernel that makes a lot of the decisions.

For example, when you type "date", the shell looks through its PATH, finds /bin/date, but then immediately execs it: the kernel loads and runs "date".

You can see that if you run bash with strace and hen give it various commands. When you type "date", for example, the shell goes looking in its PATH:

stat64("/usr/kerberos/bin/date", 0xbffff750) = -1 ENOENT
(No such file or directory)
stat64("/usr/local/bin/date", 0xbffff750) = -1 ENOENT
(No such file or directory)
stat64("/bin/date",
{st_mode=S_IFREG|0755, st_size=38588, ...}) = 0
stat64("/bin/date",
{st_mode=S_IFREG|0755, st_size=38588, ...}) = 0


Click Here - for a FREE MKS Toolkit Evaluation

The shell then clones itself (like "fork" for us older Unix folk; see the man page) and execs /bin/date:

[pid 2088] --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
[pid 2088] getpid() = 2088
[pid 2088] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
[pid 2088] rt_sigaction(SIGTSTP, {SIG_DFL}, {SIG_IGN}, 8) = 0
[pid 2088] rt_sigaction(SIGTTIN, {SIG_DFL}, {SIG_IGN}, 8) = 0
[pid 2088] rt_sigaction(SIGTTOU, {SIG_DFL}, {SIG_IGN}, 8) = 0
[pid 2088] rt_sigaction(SIGINT, {SIG_DFL}, {0x8082b40, [],
SA_RESTORER, 0x4004feb8}, 8) = 0
[pid 2088] rt_sigaction(SIGQUIT, {SIG_DFL}, {SIG_IGN}, 8) = 0
[pid 2088] rt_sigaction(SIGTERM, {SIG_DFL}, {SIG_IGN}, 8) = 0
[pid 2088] rt_sigaction(SIGCHLD, {SIG_DFL}, {0x8074ff0, [],
SA_RESTORER, 0x4004feb8}, 8) = 0
[pid 2088] execve("/bin/date", ["date"], [/* 22 vars */]) = 0


If you type the name of a shell script instead, the shell does exactly the same thing, but the exec fails, which causes the shell to read the script and interpret it:

[pid 2086] execve("./shellscript", ["./shellscript"], [/* 21 vars
*/]) = -1 ENOEXEC (Exec format error)
[pid 2086] open("./shellscript", O_RDONLY|O_LARGEFILE) = 3
[pid 2086] read(3, "echo foo\n", 80) = 9


However, if the script starts with a "#!" and references some other interpreter, it's the kernel (not the shell) that calls that other interpreter. (like Perl, for example).

[pid 2141] execve("./t.pl", ["./t.pl"], [/* 21 vars */]) = 0
[pid 2141] uname({sys="Linux", node="kerio", ...}) = 0
[pid 2141] brk(0) = 0x804bc18
[pid 2141] open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No
such file or directory)
[pid 2141]
open("/usr/lib/perl5/5.8.0/i386-
linux-thread-multi/CORE/tls/i686/mmx
/libperl.so", O_RDONLY) = -1 ENOENT
(No such file or directory)
.. similar lines deleted
[pid 2141] stat64("/usr/lib/perl5/5.8.0/i386-linux-
thread-multi/CORE/tls/i686/
mmx", 0xbffff220) = -1 ENOENT (No such file or directory)
[pid 2141] open("/usr/lib/perl5/5.8.0/i386-linux-
thread-multi/CORE/libperl.so",
O_RDONLY) = 3


A minor point, perhaps, but more accurate.

*Originally Published at APLawrnce.com


About the Author:
A.P. Lawrence provides SCO Unix and Linux consulting services http://www.pcunix.com

About UnixProNews
UnixProNews is a collection of news and commentary designed to keep you in step with the ever evolving landscape of Unix environments. News and Advice for Unix Professionals

UnixProNews is brought to you by:

SecurityConfig.com NetworkingFiles.com
NetworkNewz.com WebProASP.com
DatabaseProNews.com SQLProNews.com
ITcertificationNews.com SysAdminNews.com
LinuxProNews.com WirelessProNews.com
CProgrammingTrends.com ITCertificationNews.com


-- UnixProNews is an iEntry, Inc. publication --
iEntry, Inc. 2549 Richmond Rd. Lexington KY, 40509
2006 iEntry, Inc. All Rights Reserved Privacy Policy Legal

archives | advertising info | news headlines | free newsletters | comments/feedback | submit article


News and Advice for Unix Professionals UnixProNews News Archives About Us Feedback UnixProNews Home Page About Article Archive News Downloads WebProWorld Forums Jayde iEntry Advertise Contact