Reference:
http://en.wikipedia.org/wiki/Signal_handler
The exec functions of Unix-like operating systems are a collection of functions that causes the running process to be completely replaced by the program passed as argument to the function. As a new process is not created, the process ID (PID) does not change across and execute, but the data, heap and stack of the calling process are replaced by those of the new process.
In the execl, execlp, execv, and execvp calls, the child process inherits the parent's environment.
Files open when an exec call is made remain open in the new process. All open files must be flushed before an exec call. The exec calls do not preserve the translation modes of open files. If the child process uses files inherited from the parent, setmode function can be called to set the translation mode to the desired mode.
In MS-DOS environments, a program executed with one of the exec functions is always loaded into memory as if the "maximum allocation" in the program's executable file header is set to default value 0xFFFF. The EXEHDR utility can be used to change the maximum allocation field of a program. However, if this is done and the program is invoked with one of the exec functions, the program might behave differently from a program invoked directly from the operating-system command line or with one of the spawn functions.
Many Unix shells also offer an "exec" built-in command that replaces the shell process with the specified program.
Prototypes
The functions are declared in unistd.h for POSIX standard and in process.h for DOS, OS/2, Windows.
int execl(const char *path, const char *arg0, ...);
int execle(const char *path, const char *arg0, ..., const char *const *envp);
int execlp(const char *path, const char *arg0, ...);
int execlpe(const char *path, const char *arg0, ...);
int execv(const char *path, const char *const *argv);
int execve(const char *path, const char *const *argv, const char *const *envp);
int execvp(const char *path, const char *const *argv);
int execvpe(const char *path, const char *const *argv, const char *const *envp);
Note: Some implementations provide these functions named with a leading underscore (e.g. _execl).
Function names
The base of each function is exec, followed by one or more letters:
e - An array of pointers to environment arguments is explicitly passed to the child process.
l - Command line arguments are passed individually to the function.
p - Uses the PATH argument variable to find the file to be executed.
v - Command line arguments are passed to the function as an array of pointers.
Path
The path argument specifies the path name of the file to execute as a child process. Arguments arg0 through argn are a list of pointers to arguments to be passed to the child process. argv is an array of pointers to arguments.
Envp
Argument envp is an array of pointers to environment settings. The execle, execlpe, execve, and execvpe calls alter the environment for the child process by passing a list of environment settings through the envp argument. This argument is an array of character pointers; each element (except for the final element) points to a null-terminated string defining an environment variable.
Each null-terminated string has the form:
name=value
where name is the environment variable name, and value is the value of that that variable. The final element of the envp array must be null. If envp itself is null, the child process inherits the environment settings of the parent process.
Reference:
http://en.wikipedia.org/wiki/Exec_%28operating_system%29
In computing, when a process forks, it creates a copy of itself, which is called a "child process." The original process is then called the "parent process". More generally, a fork in a multithreading environment means that a thread of execution is duplicated, creating a child thread from the parent thread.
Under Unix and Unix-like operating systems, the parent and the child operations are selected by examining the return value of the fork() system call. In the child process, the return value of fork() is 0, whereas the return value in the parent process is the PID of the newly-created child process.
The fork operation creates a separate address space for the child. The child process has an exact copy of all the memory segments of the parent process, though if copy-on-write semantics are implemented actual physical memory may not be assigned (i.e., both processes may share the same physical memory segments for a while). Both the parent and child processes possess the same code segments, but execute independently of each other.
Reference:
http://en.wikipedia.org/wiki/Fork_%28operating_system%29
Fork-exec is a commonly used technique in Unix whereby an executing process spawns a new program. fork() is the name of the system call that the parent process uses to "divide" itself ("fork") into two identical processes. After calling fork(), the created child process is actually an exact copy of the parent - which would probably be of limited use - so it replaces itself with another process using the system call exec().
When a process forks, a complete copy of the executing program is made into the new process. This new process (which is a child of the parent) has a new process identifier (PID). The fork() function returns the child's PID to the parent, while it returns 0 to the child, in order to allow the two identical processes to distinguish from each other.
The parent process can either continue execution or wait for the child process to complete. The child, after discovering that it is the child, replaces itself completely with another program, so that the code and address space of the original program are lost.
If the parent chooses to wait for the child to die, then the parent will receive the exit code of the program that the child executed. Otherwise, the parent can ignore the child process and continue executing as it normally would; to prevent the child becoming a zombie it should wait on children at intervals or on SIGCHLD.
When the child process calls exec(), all data in the original program is lost, and replaced with a running copy of the new program. This is known as overlaying. Although all data is replaced, the file descriptors that were open in the parent are closed only if the program has explicitly marked them close-on-exec. This allows for the common practice of the parent creating a pipe prior to calling fork() and using it to communicate with the executed program.
Reference:
http://en.wikipedia.org/wiki/Fork-exec
On POSIX-compliant platforms, SIGCHLD is the signal sent by computer programs when a child process terminates. The symbolic constant for SIGCHLD is defined in the header file signal.h. Symbolic signal names are used because signal numbers can vary across platforms.
On Linux, SIGCLD is a synonym for SIGCHLD.
Usage
In Unix, a process can have children, created by fork or similar system calls. When the child terminates a SIGCHLD signal is sent to the parent. By default the signal is ignored and a zombie process is created. The parent must install a handler to act on the signal. Zombies can be avoided on some Unix platforms by explicitly ignoring SIGCHLD. This is shown in various languages in the table below. However, installing a signal handler for SIGCHLD and calling wait remain the most portable way to avoid zombies.
Reference:
http://en.wikipedia.org/wiki/SIGCHLD
Apache Struts is a free open-source framework for creating Java web applications.
Web applications differ from conventional websites in that web applications can create a dynamic response. Many websites deliver only static pages. A web application can interact with databases and business logic engines to customize a response.
Web applications based on JavaServer Pages sometimes commingle database code, page design code, and control flow code. In practice, we find that unless these concerns are separated, larger applications become difficult to maintain.
One way to separate concerns in a software application is to use a Model-View-Controller (MVC) architecture. The Model represents the business or database code, the View represents the page design code, and the Controller represents the navigational code. The Struts framework is designed to help developers create web applications that utilize a MVC architecture.
The framework provides three key components:
A "request" handler provided by the application developer that is mapped to a standard URI.
A "response" handler that transfers control to another resource which completes the response.
A tag library that helps developers create interactive form-based applications with server pages.
The framework's architecture and tags are buzzword compliant. Struts works well with conventional REST applications and with nouveau technologies like SOAP and AJAX.
Apache Struts is an open-source web application framework for developing Java EE web applications. It uses and extends the Java Servlet API to encourage developers to adopt a model-view-controller (MVC) architecture. It was originally created by Craig McClanahan and donated to the Apache Foundation in May, 2000. Formerly located under the Apache Jakarta Project and known as Jakarta Struts, it became a top level Apache project in 2005.
Reference:
http://struts.apache.org/
http://en.wikipedia.org/wiki/Struts
시도했으나, lookback 인터페이스가 선택 항목에 없어 구글링하다가,
결국 도움말을 보니, 다음과 같았다.
4.5.1. Capture frame
Interface
This field specifies the interface you want to capture on. You can only capture on one interface, and you can only capture on interfaces that Wireshark has found on the system. It is a drop-down list, so simply click on the button on the right hand side and select the interface you want. It defaults to the first non-loopback interface that supports capturing, and if there are none, the first loopback interface. On some systems, loopback interfaces cannot be used for capturing (loopback interfaces are not available on Windows platforms).
This field performs the same function as the -i <interface> command line option.
윈도우에서 네트워크 프로그램 디버깅은 뭘로 하나?