static Array HHVM_FUNCTION(getrusage, int64_t who /* = 0 */) { struct rusage usg; memset(&usg, 0, sizeof(struct rusage)); if (getrusage(who == 1 ? RUSAGE_CHILDREN : RUSAGE_SELF, &usg) == -1) { throw SystemCallFailure("getrusage"); } return Array(ArrayInit(17, ArrayInit::Mixed{}). set(PHP_RUSAGE_PARA(ru_oublock)). set(PHP_RUSAGE_PARA(ru_inblock)). set(PHP_RUSAGE_PARA(ru_msgsnd)). set(PHP_RUSAGE_PARA(ru_msgrcv)). set(PHP_RUSAGE_PARA(ru_maxrss)). set(PHP_RUSAGE_PARA(ru_ixrss)). set(PHP_RUSAGE_PARA(ru_idrss)). set(PHP_RUSAGE_PARA(ru_minflt)). set(PHP_RUSAGE_PARA(ru_majflt)). set(PHP_RUSAGE_PARA(ru_nsignals)). set(PHP_RUSAGE_PARA(ru_nvcsw)). set(PHP_RUSAGE_PARA(ru_nivcsw)). set(PHP_RUSAGE_PARA(ru_nswap)). set(s_ru_utime_tv_usec, (int64_t)usg.ru_utime.tv_usec). set(s_ru_utime_tv_sec, (int64_t)usg.ru_utime.tv_sec). set(s_ru_stime_tv_usec, (int64_t)usg.ru_stime.tv_usec). set(s_ru_stime_tv_sec, (int64_t)usg.ru_stime.tv_sec). create()); }
Array Crutch::invoke(String func, Array schema, Array params) { if (!m_php) init(); Array message = CREATE_VECTOR4(func, schema, params.size(), params); if (!f_msg_send(m_queue, 1, message)) { terminate(); throw SystemCallFailure("f_msg_send"); } Variant type, ret; if (!f_msg_receive(m_queue, 2, ref(type), MSG_MAX_SIZE, ref(ret))) { terminate(); throw SystemCallFailure("f_msg_receive"); } return ret.toArray(); }