fix for the following problem:
on *bsd /bin/sh is not just a symlink to /bin/bash as on most linux's but a real standalone shell. and it behaves differently from "bash -c" behavior .. it doesnt exec the command given but waits till the command finishes. as a result a lot of "rogue" a flying around. solution is now ( $SHELL or /bin/sh ) -c exec <cmd>
This commit is contained in:
parent
467cb9ac6d
commit
dff2aa3356
3 changed files with 15 additions and 2 deletions
|
@ -1,5 +1,8 @@
|
|||
(Format: Year/Month/Day)
|
||||
Changes for 1.0.0:
|
||||
*07/06/06:
|
||||
* Fix to avoid rogue instances of /bin/sh after forking away programs (Mathias)
|
||||
util/fbrun/FbRun.cc src/FbCommands.cc
|
||||
*07/06/04:
|
||||
* Fix fluxbox.1.in, and asciidoc, menu command is "wallpapers" not
|
||||
"wallpaper". asciidoc manpages are stale.
|
||||
|
|
|
@ -154,9 +154,12 @@ int ExecuteCmd::run() {
|
|||
// remove last number of display and add screen num
|
||||
displaystring.erase(displaystring.size()-1);
|
||||
displaystring += intbuff;
|
||||
|
||||
std::string exec_cmd = "exec " + m_cmd;
|
||||
|
||||
setsid();
|
||||
putenv(const_cast<char *>(displaystring.c_str()));
|
||||
execl(shell, shell, "-c", m_cmd.c_str(), static_cast<void*>(NULL));
|
||||
execl(shell, shell, "-c", exec_cmd.c_str(), static_cast<void*>(NULL));
|
||||
exit(0);
|
||||
|
||||
return pid; // compiler happy -> we are happy ;)
|
||||
|
|
|
@ -119,8 +119,15 @@ void FbRun::run(const std::string &command) {
|
|||
|
||||
// fork and execute program
|
||||
if (!fork()) {
|
||||
|
||||
char *shell = getenv("SHELL");
|
||||
if (!shell)
|
||||
shell = "/bin/sh";
|
||||
|
||||
std::string exec_cmd = "exec " + command;
|
||||
|
||||
setsid();
|
||||
execl("/bin/sh", "/bin/sh", "-c", command.c_str(), static_cast<void*>(NULL));
|
||||
execl(shell, shell, "-c", exec_cmd.c_str(), static_cast<void*>(NULL));
|
||||
exit(0); //exit child
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue