forked from enlightenment/efl
add new ecore_Exe control calls (interrupt and quit) and dont ertror dialog
on all exits of apps (sigint/quit/.term can be ignored i think). SVN revision: 35246
This commit is contained in:
parent
e909810628
commit
98623a9077
|
@ -252,6 +252,8 @@ extern "C" {
|
||||||
EAPI void *ecore_exe_data_get(Ecore_Exe *exe);
|
EAPI void *ecore_exe_data_get(Ecore_Exe *exe);
|
||||||
EAPI void ecore_exe_pause(Ecore_Exe *exe);
|
EAPI void ecore_exe_pause(Ecore_Exe *exe);
|
||||||
EAPI void ecore_exe_continue(Ecore_Exe *exe);
|
EAPI void ecore_exe_continue(Ecore_Exe *exe);
|
||||||
|
EAPI void ecore_exe_interrupt(Ecore_Exe *exe);
|
||||||
|
EAPI void ecore_exe_quit(Ecore_Exe *exe);
|
||||||
EAPI void ecore_exe_terminate(Ecore_Exe *exe);
|
EAPI void ecore_exe_terminate(Ecore_Exe *exe);
|
||||||
EAPI void ecore_exe_kill(Ecore_Exe *exe);
|
EAPI void ecore_exe_kill(Ecore_Exe *exe);
|
||||||
EAPI void ecore_exe_signal(Ecore_Exe *exe, int num);
|
EAPI void ecore_exe_signal(Ecore_Exe *exe, int num);
|
||||||
|
|
|
@ -47,6 +47,7 @@ static int _ecore_exe_make_sure_its_dead(void *data);
|
||||||
static int _ecore_exe_make_sure_its_really_dead(void *data);
|
static int _ecore_exe_make_sure_its_really_dead(void *data);
|
||||||
static Ecore_Exe_Event_Add *_ecore_exe_event_add_new(void);
|
static Ecore_Exe_Event_Add *_ecore_exe_event_add_new(void);
|
||||||
static void _ecore_exe_event_add_free(void *data, void *ev);
|
static void _ecore_exe_event_add_free(void *data, void *ev);
|
||||||
|
static void _ecore_exe_dead_attach(Ecore_Exe *exe);
|
||||||
|
|
||||||
EAPI int ECORE_EXE_EVENT_ADD = 0;
|
EAPI int ECORE_EXE_EVENT_ADD = 0;
|
||||||
EAPI int ECORE_EXE_EVENT_DEL = 0;
|
EAPI int ECORE_EXE_EVENT_DEL = 0;
|
||||||
|
@ -1006,6 +1007,40 @@ ecore_exe_continue(Ecore_Exe * exe)
|
||||||
kill(exe->pid, SIGCONT);
|
kill(exe->pid, SIGCONT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends the given spawned process a interrupt (@c SIGINT) signal.
|
||||||
|
* @param exe Process handle to the given process.
|
||||||
|
* @ingroup Ecore_Exe_Signal_Group
|
||||||
|
*/
|
||||||
|
EAPI void
|
||||||
|
ecore_exe_interrupt(Ecore_Exe * exe)
|
||||||
|
{
|
||||||
|
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
|
||||||
|
{
|
||||||
|
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_interrupt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_ecore_exe_dead_attach(exe);
|
||||||
|
kill(exe->pid, SIGINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends the given spawned process a quit (@c SIGQUIT) signal.
|
||||||
|
* @param exe Process handle to the given process.
|
||||||
|
* @ingroup Ecore_Exe_Signal_Group
|
||||||
|
*/
|
||||||
|
EAPI void
|
||||||
|
ecore_exe_quit(Ecore_Exe * exe)
|
||||||
|
{
|
||||||
|
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
|
||||||
|
{
|
||||||
|
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_quit");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_ecore_exe_dead_attach(exe);
|
||||||
|
kill(exe->pid, SIGQUIT);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends the given spawned process a terminate (@c SIGTERM) signal.
|
* Sends the given spawned process a terminate (@c SIGTERM) signal.
|
||||||
* @param exe Process handle to the given process.
|
* @param exe Process handle to the given process.
|
||||||
|
@ -1014,25 +1049,12 @@ ecore_exe_continue(Ecore_Exe * exe)
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_exe_terminate(Ecore_Exe * exe)
|
ecore_exe_terminate(Ecore_Exe * exe)
|
||||||
{
|
{
|
||||||
struct _ecore_exe_dead_exe *dead;
|
|
||||||
|
|
||||||
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
|
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
|
||||||
{
|
{
|
||||||
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_terminate");
|
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_terminate");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
_ecore_exe_dead_attach(exe);
|
||||||
dead = calloc(1, sizeof(struct _ecore_exe_dead_exe));
|
|
||||||
if (dead)
|
|
||||||
{
|
|
||||||
dead->pid = exe->pid;
|
|
||||||
dead->cmd = strdup(exe->cmd);
|
|
||||||
IF_FN_DEL(ecore_timer_del, exe->doomsday_clock);
|
|
||||||
exe->doomsday_clock =
|
|
||||||
ecore_timer_add(10.0, _ecore_exe_make_sure_its_dead, dead);
|
|
||||||
exe->doomsday_clock_dead = dead;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Sending TERM signal to %s (%d).\n", exe->cmd, exe->pid);
|
printf("Sending TERM signal to %s (%d).\n", exe->cmd, exe->pid);
|
||||||
kill(exe->pid, SIGTERM);
|
kill(exe->pid, SIGTERM);
|
||||||
}
|
}
|
||||||
|
@ -1591,4 +1613,22 @@ _ecore_exe_event_del_free(void *data __UNUSED__, void *ev)
|
||||||
free(e);
|
free(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ecore_exe_dead_attach(Ecore_Exe *exe)
|
||||||
|
{
|
||||||
|
struct _ecore_exe_dead_exe *dead;
|
||||||
|
|
||||||
|
if (exe->doomsday_clock_dead) return;
|
||||||
|
dead = calloc(1, sizeof(struct _ecore_exe_dead_exe));
|
||||||
|
if (dead)
|
||||||
|
{
|
||||||
|
dead->pid = exe->pid;
|
||||||
|
dead->cmd = strdup(exe->cmd);
|
||||||
|
IF_FN_DEL(ecore_timer_del, exe->doomsday_clock);
|
||||||
|
exe->doomsday_clock =
|
||||||
|
ecore_timer_add(10.0, _ecore_exe_make_sure_its_dead, dead);
|
||||||
|
exe->doomsday_clock_dead = dead;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue