Quote:
Originally Posted by shafi2all
Inside the C program, when execv(cPath, argv) is called, it launches new process image using "/bin/sh -c" option even if it is getting launched from C-shell. Is there a way to make execv to use "/bin/csh " or "/bin/sh"(without -c option)..
|
You are confusing the system function with the execv function, don't you? I mean, the execv function will replace the current process image with a new one. According to the execv man page (extracted from a Solaris box):
Quote:
Each of the functions in the exec family replaces the
current process image with a new process image. The new
image is constructed from a regular, executable file called
the new process image file. This file is either an execut-
able object file or a file of data for an interpreter. There
is no return from a successful call to one of these func-
tions because the calling process image is overlaid by the
new process image.
An interpreter file begins with a line of the form
#! pathname [arg]
where pathname is the path of the interpreter, and arg is an
optional argument. When an interpreter file is executed, the
system invokes the specified interpreter. The pathname
specified in the interpreter file is passed as arg0 to the
interpreter. If arg was specified in the interpreter file,
it is passed as arg1 to the interpreter. The remaining argu-
ments to the interpreter are arg0 through argn of the origi-
nally exec'd file. The interpreter named by pathname must
not be an interpreter file.
|
while the system function will execute the command string by calling the system's shell:
Quote:
system() executes a command specified in string by calling /bin/sh -c
string, and returns after the command has been completed. During exe-
cution of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT
will be ignored.
|