10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
Hello everyone,
I am a complete newbie to UNIX. I am using Debian LXDE 64-bit. I have a question regarding the child and parent process communication. According to wikipedia.org and various other sources, when a child process exits it sends the SIGCHLD signal to its parent... (1 Reply)
Discussion started by: sreyan32
1 Replies
2. Shell Programming and Scripting
Hi everyone
i am very new to linux , working on bash shell.
I am trying to solve the given problem
1. Create a process and then create children using fork
2. Check the Status of the application for successful running.
3. Kill all the process(threads) except parent and first child... (2 Replies)
Discussion started by: vizz_k
2 Replies
3. Programming
This needs to work on HPUX and Linux.
I do a fork and create a child process. During execution of the child process, it is possible child become lost or get killed. That is the reason why I create the child process. However if the child process doesnt get killed, I do want to know the return... (2 Replies)
Discussion started by: usustarr
2 Replies
4. UNIX Desktop Questions & Answers
below is my code , but for some reason the return part is not working, only file transfer is happening and no exit status is checked .please me help me to fix this code
#!/bin/sh
#set -vx
ftp -nv sitelocation << !
user username password
lcd localdir
cd /remote dir
mget *.*
... (4 Replies)
Discussion started by: gwrm
4 Replies
5. UNIX for Advanced & Expert Users
Hi,
I have an application where if it runs indivisually could able to execute commands (like system("ls")) and could able to execute tcl script.
Same application if started from health monitor process (From health monitor process my application will be forked), it could not execute the... (1 Reply)
Discussion started by: chandrutiptur
1 Replies
6. UNIX for Dummies Questions & Answers
Hi All,
I have a problem to identify the error code thrown by FTP Server while uploading files.
The message is : ftp return 32.
I couldn't find out what is the meaning of that. :confused:
OS is Sun Solaris 2.10.
Anyone can help?
Thanks a lot (1 Reply)
Discussion started by: wilsonSurya
1 Replies
7. Shell Programming and Scripting
Hi,
I have a process that I run in the background that looks like this
${BASEDIR}/ksh/sqler.ksh ${compnames003} &
and I would like to get the return code of the sqler.ksh script.
so my code is like this
${BASEDIR}/ksh/sqler.ksh ${compnames003} &
retcode=$? (3 Replies)
Discussion started by: c19h28O2
3 Replies
8. Programming
two programs A and B writting in c++
I am using A to B and I want to know the return code of B.
in B
------------------------
int main()
{
return 11;
}
------------------------
in A
------------------------
int main()
{
system(A);
}
------------------------
Is it the right way... (1 Reply)
Discussion started by: filedeliver
1 Replies
9. UNIX for Advanced & Expert Users
two programs A and B writting in c++
I am using A to B and I want to know the return code of B.
in B
------------------------
int main()
{
return 11;
}
------------------------
in A
------------------------
int main()
{
system(A);
}
------------------------
Is it the right way... (1 Reply)
Discussion started by: filedeliver
1 Replies
10. Shell Programming and Scripting
Hi
I have the following piece of code that is calling another child process archive.ksh in the background
while read file;
do
file_name=`ls $file`;
ksh archive.ksh $file_name &;
done < $indirect_file
The problem is, indirect_file may contain anwhere from 2 to 20 different... (5 Replies)
Discussion started by: Vikas Sood
5 Replies
SYSTEM(3) Linux Programmer's Manual SYSTEM(3)
NAME
system - execute a shell command
SYNOPSIS
#include <stdlib.h>
int system(const char *command);
DESCRIPTION
The system() library function uses fork(2) to create a child process that executes the shell command specified in command using execl(3) as
follows:
execl("/bin/sh", "sh", "-c", command, (char *) 0);
system() returns after the command has been completed.
During execution of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored, in the process that calls system() (these
signals will be handled according to their defaults inside the child process that executes command).
If command is NULL, then system() returns a status indicating whether a shell is available on the system.
RETURN VALUE
The return value of system() is one of the following:
* If command is NULL, then a nonzero value if a shell is available, or 0 if no shell is available.
* If a child process could not be created, or its status could not be retrieved, the return value is -1.
* If a shell could not be executed in the child process, then the return value is as though the child shell terminated by calling _exit(2)
with the status 127.
* If all system calls succeed, then the return value is the termination status of the child shell used to execute command. (The termina-
tion status of a shell is the termination status of the last command it executes.)
In the last two cases, the return value is a "wait status" that can be examined using the macros described in waitpid(2). (i.e., WIFEX-
ITED(), WEXITSTATUS(), and so on).
system() does not affect the wait status of any other children.
ATTRIBUTES
For an explanation of the terms used in this section, see attributes(7).
+----------+---------------+---------+
|Interface | Attribute | Value |
+----------+---------------+---------+
|system() | Thread safety | MT-Safe |
+----------+---------------+---------+
CONFORMING TO
POSIX.1-2001, POSIX.1-2008, C89, C99.
NOTES
system() provides simplicity and convenience: it handles all of the details of calling fork(2), execl(3), and waitpid(2), as well as the
necessary manipulations of signals; in addition, the shell performs the usual substitutions and I/O redirections for command. The main
cost of system() is inefficiency: additional system calls are required to create the process that runs the shell and to execute the shell.
If the _XOPEN_SOURCE feature test macro is defined (before including any header files), then the macros described in waitpid(2) (WEXITSTA-
TUS(), etc.) are made available when including <stdlib.h>.
As mentioned, system() ignores SIGINT and SIGQUIT. This may make programs that call it from a loop uninterruptible, unless they take care
themselves to check the exit status of the child. For example:
while (something) {
int ret = system("foo");
if (WIFSIGNALED(ret) &&
(WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
break;
}
According to POSIX.1, it is unspecified whether handlers registered using pthread_atfork(3) are called during the execution of system().
In the glibc implementation, such handlers are not called.
In versions of glibc before 2.1.3, the check for the availability of /bin/sh was not actually performed if command was NULL; instead it was
always assumed to be available, and system() always returned 1 in this case. Since glibc 2.1.3, this check is performed because, even
though POSIX.1-2001 requires a conforming implementation to provide a shell, that shell may not be available or executable if the calling
program has previously called chroot(2) (which is not specified by POSIX.1-2001).
It is possible for the shell command to terminate with a status of 127, which yields a system() return value that is indistinguishable from
the case where a shell could not be executed in the child process.
Caveats
Do not use system() from a privileged program (a set-user-ID or set-group-ID program, or a program with capabilities) because strange val-
ues for some environment variables might be used to subvert system integrity. For example, PATH could be manipulated so that an arbitrary
program is executed with privilege. Use the exec(3) family of functions instead, but not execlp(3) or execvp(3) (which also use the PATH
environment variable to search for an executable).
system() will not, in fact, work properly from programs with set-user-ID or set-group-ID privileges on systems on which /bin/sh is bash
version 2: as a security measure, bash 2 drops privileges on startup. (Debian uses a different shell, dash(1), which does not do this when
invoked as sh.)
Any user input that is employed as part of command should be carefully sanitized, to ensure that unexpected shell commands or command
options are not executed. Such risks are especially grave when using system() from a privileged program.
SEE ALSO
sh(1), execve(2), fork(2), sigaction(2), sigprocmask(2), wait(2), exec(3), signal(7)
COLOPHON
This page is part of release 4.15 of the Linux man-pages project. A description of the project, information about reporting bugs, and the
latest version of this page, can be found at https://www.kernel.org/doc/man-pages/.
2017-09-15 SYSTEM(3)