本文整理汇总了C++中pthread_atfork函数的典型用法代码示例。如果您正苦于以下问题:C++ pthread_atfork函数的具体用法?C++ pthread_atfork怎么用?C++ pthread_atfork使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pthread_atfork函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: do_test
static int
do_test (void)
{
pid_t pid;
int status = 0;
if (pthread_atfork (prepare1, parent1, child1) != 0)
{
puts ("1st atfork failed");
exit (1);
}
if (pthread_atfork (prepare2, parent2, child2) != 0)
{
puts ("2nd atfork failed");
exit (1);
}
pid = fork ();
if (pid == -1)
{
puts ("fork failed");
exit (1);
}
if (pid != 0)
{
/* Parent. */
if (val != 24)
{
printf ("expected val=%d, got %d\n", 24, val);
exit (1);
}
if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
{
puts ("waitpid failed");
exit (1);
}
}
else
{
/* Child. */
if (val != 80)
{
printf ("expected val=%d, got %d\n", 80, val);
exit (2);
}
}
return status;
}
开发者ID:Xilinx,项目名称:eglibc,代码行数:51,代码来源:tst-atfork1.c
示例2: main
int main()
{
int err;
pid_t pid;
pthread_t tid;
if((err = pthread_atfork(prepare,parent,child)) != 0)
{
perror("pthread_atfork error");
exit(-1);
}
if((err == pthread_create(&tid, NULL,thr_fn,0))< 0)
{
perror("pthread_create error");
exit(-2);
}
sleep(2);
printf("parent about to fork...\n");
if((pid = fork()) < 0)
{
exit(-3);
}
else if(pid == 0)
{
printf("child return from fork\n");
}
else
{
printf("parent return from fork\n");
}
return 0;
}
开发者ID:yafngzh,项目名称:test,代码行数:34,代码来源:test_pthread_atfork.c
示例3: main
int main(int argc, char *argv[])
{
int err;
pid_t pid;
pthread_t tid;
if ((err = pthread_atfork(prepare, parent, child))) {
fprintf(stderr, "pthread_atfork error\n");
exit(2);
}
err = pthread_create(&tid, NULL, thr_fn, NULL);
if (err) {
fprintf(stderr, "pthread_create error\n");
exit(3);
}
sleep(2);
printf("parent about to fork...\n");
if ((pid = fork()) < 0) {
fprintf(stderr, "fork error\n");
exit(4);
} else if (pid == 0) {
printf("child returned from fork\n");
} else {
printf("parent returned from fork\n");
}
exit(0);
}
开发者ID:panweiping3,项目名称:programming,代码行数:31,代码来源:main.c
示例4: slog_open
int slog_open(const char *dir, const char *name, enum slog_level level, uint64_t rotate_size)
{
if (_slog_mkdir_recursive(dir) == -1)
return -1;
char *filename = calloc(1, strlen(dir) + strlen(name) + 2);
sprintf(filename, "%s/%s", dir, name);
int fd = open(filename, O_WRONLY | O_APPEND | O_CREAT, 0644);
if (fd < 0) {
free(filename);
return -1;
}
char *lockname = calloc(1, strlen(dir) + strlen(name) + 8);
sprintf(lockname, "%s/.%s.lock", dir, name);
int lockfd = open(lockname, O_RDONLY | O_CREAT, 0644);
if (lockfd < 0) {
free(lockname);
free(filename);
close(fd);
return -1;
}
logger = calloc(1, sizeof(*logger));
logger->fd = fd;
logger->filename = filename;
logger->level = level;
logger->lockfd = lockfd;
logger->lockname = lockname;
logger->rotate_size = rotate_size;
fstat(fd, &logger->fdstat);
pthread_mutex_init(&logger->mutex, NULL);
/* fork是安全的, 子进程会保持mutex无锁, 同时会重新打开lock文件 */
pthread_atfork(_slog_atfork_prepare, _slog_atfork_parent, _slog_atfork_child);
return 0;
}
开发者ID:owenliang,项目名称:simple_kit,代码行数:33,代码来源:slog.c
示例5: uwsgi_python_enable_threads
void uwsgi_python_enable_threads() {
PyEval_InitThreads();
if (pthread_key_create(&up.upt_save_key, NULL)) {
uwsgi_error("pthread_key_create()");
exit(1);
}
if (pthread_key_create(&up.upt_gil_key, NULL)) {
uwsgi_error("pthread_key_create()");
exit(1);
}
pthread_setspecific(up.upt_save_key, (void *) PyThreadState_Get());
pthread_setspecific(up.upt_gil_key, (void *) PyThreadState_Get());
pthread_mutex_init(&up.lock_pyloaders, NULL);
pthread_atfork(uwsgi_python_pthread_prepare, uwsgi_python_pthread_parent, uwsgi_python_pthread_child);
up.gil_get = gil_real_get;
up.gil_release = gil_real_release;
up.swap_ts = simple_threaded_swap_ts;
up.reset_ts = simple_threaded_reset_ts;
if (uwsgi.threads > 1) {
up.swap_ts = threaded_swap_ts;
up.reset_ts = threaded_reset_ts;
}
uwsgi_log("python threads support enabled\n");
}
开发者ID:theflockers,项目名称:file-uploader,代码行数:31,代码来源:python_plugin.c
示例6: main
int main(void)
{
int err;
pid_t pid;
pthread_t tid;
if((err = pthread_atfork(prepare,parent,child)) != 0){
err_exit(err,"can't install fork handlers");
}
if((err = pthread_create(&tid,NULL,thr_fn,0)) != 0){
err_exit(err,"can't create thread");
}
sleep(2);
printf("parent about to fork...\n");
if((pid = fork()) < 0){
err_quit("fork failed");
}else if(pid == 0){ //child
printf("child return from fork\n");
}else{
printf("parent return from fork\n");
}
exit(0);
}
开发者ID:YMChenLiye,项目名称:APUE,代码行数:25,代码来源:atfork.c
示例7: _od_xpc_pipe
XPC_RETURNS_RETAINED
static xpc_pipe_t
_od_xpc_pipe(bool resetPipe)
{
static dispatch_once_t once;
xpc_pipe_t result = NULL;
#ifdef __i386__
if (xpc_pipe_create == NULL) {
_si_disable_opendirectory();
return NULL;
}
#endif
dispatch_once(&once, ^(void) {
char *rc_xbs;
/* if this is a build environment we ignore opendirectoryd */
rc_xbs = getenv("RC_XBS");
if ((issetugid() == 0) && (rc_xbs != NULL) && (strcmp(rc_xbs, "YES") == 0)) {
_si_opendirectory_disabled = 1;
return;
}
pthread_atfork(_od_fork_prepare, _od_fork_parent, _od_fork_child);
});
开发者ID:apportable,项目名称:lookup,代码行数:26,代码来源:ds_module.c
示例8: main
int main( void ) {
int err;
pid_t pid;
pthread_t tid;
#if defined( BSD ) || defined( MACOS )
printf( "pthread atfork is unsupported\n" );
#else
if ( (err = pthread_atfork( prepare, parent, child )) != 0 ) {
err_exit( err, "cannot install fork handlers" );
}
err = pthread_create( &tid, NULL, thread_run, 0 );
if ( err != 0 ) {
err_exit( err, "cannot create thread" );
}
sleep( 2 ); /* TODO: why ? */
printf( "parent about to fork...\n" );
if ( (pid = fork()) < 0 ) {
err_quit( "fork failed" );
} else if ( pid == 0 ) {
/* child is running */
printf( "child returned from fork\n" );
} else {
/* parent is running */
printf( "parent returned from fork\n" );
}
#endif
return 0;
}
开发者ID:gnanasekarvelu,项目名称:miscellaneous,代码行数:29,代码来源:eg1207.c
示例9: udev_monitor_register
// register a monitor in our list of monitors
// return 0 on success
// return -ENOSPC if we're out of slots
static int udev_monitor_register( struct udev_monitor* monitor ) {
g_monitor_table_spinlock();
// find a free slot
int i = 0;
int rc = -ENOSPC;
for( i = 0; i < UDEV_MAX_MONITORS; i++ ) {
if( g_monitor_table[i] == NULL ) {
g_monitor_table[i] = monitor;
monitor->slot = i;
rc = 0;
break;
}
}
if( g_pid == 0 ) {
// first monitor ever.
// register our fork handler.
g_pid = getpid();
pthread_atfork( NULL, NULL, udev_monitor_atfork );
}
g_monitor_table_unlock();
return rc;
}
开发者ID:bjb,项目名称:vdev,代码行数:33,代码来源:libudev-fs.c
示例10: test
/* Test function -- calls pthread_setschedparam() and checks that EINTR is never returned. */
void * test(void * arg)
{
int ret = 0;
/* We don't block the signals SIGUSR1 and SIGUSR2 for this THREAD */
ret = pthread_sigmask(SIG_UNBLOCK, &usersigs, NULL);
if (ret != 0)
{
UNRESOLVED(ret, "Unable to unblock SIGUSR1 and SIGUSR2 in worker thread");
}
while (do_it)
{
count_ope++;
ret = pthread_atfork(prepare, parent, child);
if (ret == EINTR)
{
FAILED("EINTR was returned");
}
}
return NULL;
}
开发者ID:Mellanox,项目名称:arc_ltp,代码行数:27,代码来源:3-3.c
示例11: InitAtfork
__END_DECLS
// ------------------------------------------------------------------------
static void InitAtfork() {
static pthread_once_t atfork_init = PTHREAD_ONCE_INIT;
pthread_once(&atfork_init, [](){
pthread_atfork(
[](){
if (g_debug != nullptr) {
g_debug->PrepareFork();
}
},
[](){
if (g_debug != nullptr) {
g_debug->PostForkParent();
}
},
[](){
if (g_debug != nullptr) {
g_debug->PostForkChild();
}
}
);
});
}
开发者ID:316181444,项目名称:platform_bionic,代码行数:25,代码来源:malloc_debug.cpp
示例12: s_once_proc
static void
s_once_proc(void) {
int st;
mccp_result_t r;
if ((st = pthread_attr_init(&s_attr)) == 0) {
if ((st = pthread_attr_setdetachstate(&s_attr,
PTHREAD_CREATE_DETACHED)) != 0) {
errno = st;
perror("pthread_attr_setdetachstate");
mccp_exit_fatal("can't initialize detached thread attr.\n");
}
} else {
errno = st;
perror("pthread_attr_init");
mccp_exit_fatal("can't initialize thread attr.\n");
}
if ((r = mccp_hashmap_create(&s_thd_tbl, MCCP_HASHMAP_TYPE_ONE_WORD,
NULL)) != MCCP_RESULT_OK) {
mccp_perror(r, "mccp_hashmap_create()");
mccp_exit_fatal("can't initialize the thread table.\n");
}
if ((r = mccp_hashmap_create(&s_alloc_tbl, MCCP_HASHMAP_TYPE_ONE_WORD,
NULL)) != MCCP_RESULT_OK) {
mccp_perror(r, "mccp_hashmap_create()");
mccp_exit_fatal("can't initialize the thread allocation table.\n");
}
(void)pthread_atfork(NULL, NULL, s_child_at_fork);
}
开发者ID:GPtpvWKrrZWERTEg,项目名称:mccp,代码行数:31,代码来源:thread.c
示例13: init_process
init_process(void)
{
assert(!process_inited);
if (getenv("_RR_CHECK_PRELOAD")) {
/* The tracer parent is just checking that we loaded.
* We did, so return a success code. */
exit(0);
}
real_pthread_create = dlsym(RTLD_NEXT, "pthread_create");
real_pthread_mutex_timedlock = dlsym(RTLD_NEXT, "pthread_mutex_timedlock");
buffer_enabled = !!getenv(SYSCALLBUF_ENABLED_ENV_VAR);
if (!buffer_enabled) {
debug("Syscall buffering is disabled");
process_inited = 1;
return;
}
pthread_atfork(NULL, NULL, post_fork_child);
install_syscall_filter();
rrcall_monkeypatch_vdso(&_vsyscall_hook_trampoline);
process_inited = 1;
init_thread();
}
开发者ID:passimm,项目名称:rr,代码行数:28,代码来源:preload.c
示例14: __attribute__
void __attribute__ ((constructor)) cop_init()
{
if (!cop_process_init_complete) {
cop_init_cops();
/* set default memory pool values */
unsigned long cc_size = 16 * 1024 * 1024;
int cc_bolt = 0;
unsigned long rx_size = 16 * 1024 * 1024;
int rx_bolt = 0;
read_environment_variables(&cc_size, &cc_bolt, &rx_size, &rx_bolt);
mpr_rx_pbic = malloc(sizeof(mapped_memory_pbic_root));
mpr_cc_pbic = malloc(sizeof(mapped_memory_pbic_root));
if (COP_NUMBER_COPS) {
/* check for compatible */
call_cop_get_compatible(COP_SYM_CRYPTO);
cop_init_rx_pbic(mpr_rx_pbic, pool_block_Size64K, rx_size, rx_bolt);
cop_init_cc_pbic(mpr_cc_pbic, pool_block_Size64K, cc_size, cc_bolt);
/* register fork handler */
pthread_atfork(NULL, cop_fork_parent, cop_fork_child);
}
cop_process_init_complete = 1;
}
}
开发者ID:mkravetz,项目名称:libcopl,代码行数:28,代码来源:cop_pool.c
示例15: main
int
main(void)
{
int err;
pid_t pid;
pthread_t tid;
#if defined(BSD) || defined(MACOS)
printf("pthread_atfork is unsupported\n");
#else
if((err = pthread_atfork(prepare,parent,child)) != 0)
err_exit(err,"can't install fork handlers");
err = pthread_create(&tid,NULL,thr_fn,0);
if(err != 0)
err_exit(err,"can't create thread");
sleep(2);
printf("parent about to fork ...\n");
if((pid = fork()) < 0)
err_quit("fork failed");
else if(pid == 0)
printf("child returned from fork\n");
else
printf("parent returned from fork\n");
#endif
exit(0);
}
开发者ID:tsiangleo,项目名称:apue,代码行数:29,代码来源:12-7.c
示例16: boilerplate_init
static int boilerplate_init(void)
{
pthread_atfork(NULL, NULL, __boilerplate_init);
__boilerplate_init();
return 0;
}
开发者ID:rcn-ee,项目名称:xenomai-3,代码行数:7,代码来源:ancillaries.c
示例17: opal_warn_fork
void opal_warn_fork(void)
{
if (opal_warn_on_fork && !atfork_called) {
pthread_atfork(warn_fork_cb, NULL, NULL);
atfork_called = true;
}
}
开发者ID:Slbomber,项目名称:ompi,代码行数:7,代码来源:opal_init.c
示例18: main
int main() {
pid_t pid;
puts("pocz±tek programu");
inicjalizacja_watkow();
/* rejestrowanie funkcji wykonywanej w procesie potomnym */
errno = pthread_atfork(NULL, NULL, inicjalizacja_watkow);
test_errno("pthread_atfork");
sleep(1);
pid = fork();
printf("fork => %d\n", pid);
switch (pid) {
case -1:
test_errno("fork");
break;
case 0: // proces potomny
sleep(2);
break;
default: // proces nadrzêdny
waitpid(pid, NULL, 0);
test_errno("waitpid");
break;
}
/* koñczymy proces, bez ogl±dania siê na w±tki */
return EXIT_SUCCESS;
}
开发者ID:WojciechMula,项目名称:wikibooks-posix-threads,代码行数:32,代码来源:pthread_fork.c
示例19: pthread_atfork
/*!
Initialize the static process data.
*/
void Process::initialize ()
{
#ifdef HAVE_PTHREAD
forkMutex.init ();
pthread_atfork (forkPrepare, forkParent, forkChild);
#endif
}
开发者ID:rupinder,项目名称:GNU-MyServer,代码行数:10,代码来源:process.cpp
示例20: th_task_initialize
/*****************************************************************************
* th_task_initialize -- called to initialize the task API
*
* th_task_initialize spawns a single listener pthread
* this thread is solely to listen for messages from child
* processes, which will be the task_exit message
*
*****************************************************************************/
th_status th_task_initialize(void)
{
th_status status = TH_OK;
int i = 0;
assert(CONKER_MAX_TASKS < FD_SETSIZE);
th_log_info("[TH_FORK] -- th_task_initialize, max tasks = %d\n",
CONKER_MAX_TASKS);
for (i = 0; i < CONKER_MAX_TASKS; i++) {
task_pids[i] = -1;
task_pipes[i].pipe_fds1[0] = task_pipes[i].pipe_fds1[1] = -1;
task_pipes[i].pipe_fds2[0] = task_pipes[i].pipe_fds2[1] = -1;
}
listener_flag = 1;
/* start the listener thread */
if (pthread_create(&listener_thread,
NULL,
listener_thread_body,
NULL) != 0) {
status = TH_ERROR;
}
/* register child 'atfork' function */
if (pthread_atfork(NULL, NULL, child_fork_handler) != 0) {
status = TH_ERROR;
}
parent_pid = getpid();
return status;
}
开发者ID:jgphpc,项目名称:OpenMP_MCA_Project,代码行数:42,代码来源:th_fork.c
注:本文中的pthread_atfork函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论